`

hashmap的正确使用方法

阅读更多

近期发生太多关于集合类使用不当导致的bug, 在此记录下关于hashmap的信息。

 

https://gist.github.com/1081908

http://www.iteye.com/topic/962172

http://blog.sina.com.cn/s/blog_5465f7f20100tugf.html

http://blog.csdn.net/cleverpig2003/article/details/249844

 

问题列表:

1. hashmap.get() 导致cpu100%

2. hashmap.get()值不正确

……

 

剖析:

1. hashmap是非线程安全,所以也无须谈其数据是否正确。

2. 高并发下,hashmap的设计,可能会导致链表闭环。(可看hashmap的源码,hash冲突和动态扩容)

3. hashmap动态扩容的成本。大数据量的put,在没有设定容量的情况下,会有些问题.

 

建议:

1. 多看集合类的源码实现

2. 多看java.util.concurrent.*

 

 

分享到:
评论

相关推荐

    有关hashMap跟hashTable的区别,说法正确的是?

    HashTable使用Enumeration,HashMap使用Iterator D. HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。 答案 A B C D 解析 A正确。Map是一个接口,hashtable,hashmap都是它的实现。 B...

    Java HashMap 如何正确遍历并删除元素的方法小结

    主要介绍了Java HashMap 如何正确遍历并删除元素的方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    hashmap和hashtable的区别.docx

    hashmap和hashtable的区别 HashMap和Hashtable都实现了Map接口,但决定用...而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。

    Java中HashMap的工作机制

    哈希简单的说就是对变量/对象的属性应用某种算法后得到的一个唯一的串,用这个串来确 定变量/对象的唯一性。一个正确的哈希函数必须遵守这个准则。

    【并发】为什么HashMap是线程不安全的?

    目录 1.什么是线程安全性(what) 2.如何分辨一个类是否线程安全?(HOW) ...正确性:多个线程访问某个类,不管怎么调度这些线程,其代码中不需要额外的同步或协同(synchronized),这个类依然有正确

    jdk1.7和jdk1.8中hashmap区别

    当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。更多细节 jdk1.7和jdk1.8中hashmap区别: Hashmap解决冲突是采用链表,性能上就抱有一定疑问,如果说成百上千个节点在Hash时发生碰撞。...

    c-hashmap:用于C编程语言的快速哈希maphash表(无论您要调用什么)

    正确使用按键 您可以使用任何字节字符串作为键,因为哈希映射键是二进制安全的。 这是因为用户可能希望散列除以null终止的char数组以外的其他内容。 因此,在设置,访问哈希表或从哈希表中删除条目时,必须自己传递...

    HashMap在Android和Java中的不同实现

    情况大致是这样的:Android终端和服务器(Spring),完全相同的字符串键值对放入HashMap中竟然顺序不一样,这直接导致了服务器和Android终端用HmacSHA256算法加密出的摘要也不一样,服务器也无法进行正确的数据验证。...

    java 返回多个值的问题

    其中我们可以通过userinfo来知道获得的数据,虽然我们直接使用 userinfo的相关set方法将数据保存到userinfo对象中,一般如果不重新生成对象,我们可以将值正确返回. 但是在hibernate等数据库访问时,我们却无法...

    java7hashmap源码-for-java:java学习笔记

    hashmap源码 Java学习笔记 Effective Java Topic2:插件销毁对象 2. 多参数情况 使用重叠构造器; 使用Build模式【构建器】: new A.Build().set.set.build(); Build模式也适用于类层次结构 递归类型参数 /* * 递归...

    【Java】—模拟银行存取款业务(项目报告已上传)

    本项目的主要功能是模拟银行的存取款业务,当用户登录时需判断...Test类要调用User类生成用户,并使用HashMap的put方法将用户信息与用户关联起来,定义一个Bank类的实例对象,调用Bank类里的登陆方法,开始整个程序。

    Java多线程编程的线程安全性.docx

    因为这关系到我们如何正确使用这些类。Java标准库中的一些类如ArrayList、HashMap和SimpleDateFormat,都是非线程安全的,在多线程环境下直接使用它们可能导致一些非预期的结果,甚至是一些灾难性的结果。一般来说,...

    JAVA面试题最全集

    被声明为final的方法也同样只能使用,不能重载 finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 ...

    java7hashmap源码-Concurrency:这是用来学习java多线程的

    hashmap源码 concurrency 项目介绍 并发编程 可见性-volatile 通过内存屏障和禁止重排序优化实现 1.对volatile变量写操时,会在写操作后加入一条store屏障指令,将本地内存中的共享变量值刷新到主内存 2.对volatile...

    MazeTest:这是一个迷宫的实现,我们用来教学生如何编写导航迷宫的算法

    将正确的路径放在 loadIdealMovePath 方法中将您的导航算法放在proceedToNextCell 方法中。 你需要有 Cell 的实现。 您需要了解三个关键变量: currentCell - 对您当前所在位置的 Cell 对象的引用 currentCellKey -...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    如何使用方法的返回值? 166 7.4.4 使用return结束方法 166 7.5 方法重载(overload):给汽车加速添个限制 168 7.5.1 什么是方法的签名 168 7.5.2 什么是重载?为什么要重载? 168 7.5.3 给汽车加个重载的方法...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    如何使用方法的返回值? 166 7.4.4 使用return结束方法 166 7.5 方法重载(overload):给汽车加速添个限制 168 7.5.1 什么是方法的签名 168 7.5.2 什么是重载?为什么要重载? 168 7.5.3 给汽车加个重载的方法...

    java collection总结-流氓版

    本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类,ArrayList Vector HashMap Hashtable

Global site tag (gtag.js) - Google Analytics