java中hashmap的实现原理以及hashmap的正确使用
来源:互联网 发布:随身淘宝:皇家小地主》 编辑:程序博客网 时间:2024/05/07 15:34
http://www.cnblogs.com/skywang12345/p/3323085.html
上面网址是博客园一位博主总结的关于java结合类的深入理解,个人认为总结的很深入全面,而且容易理解。读者可以参考里面的文章。
关于正确的使用hashmap:
1:不要在并发场景中使用HashMap
HashMap是线程不安全的,如果被多个线程共享的操作,将会引发不可预知的问题,据sun的说法,在扩容时,会引起链表的闭环,在get元素时,就会无限循环,后果是cpu100%。
看看get方法的红色部分
- public V get(Object key) {
- if (key == null)
- return getForNullKey();
- int hash = hash(key.hashCode());
- for (Entry<K,V> e = table[indexFor(hash, table.length)];
- e != null;
- e = e.next) {
- Object k;
- if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
- return e.value;
- }
- return null;
- }
2:如果数据大小是固定的,那么最好给HashMap设定一个合理的容量值
根据上面的分析,HashMap的初始默认容量是16,默认加载因子是0.75,也就是说,如果采用HashMap的默认构造函数,当增加数据时,数据实际容量超过10*0.75=12时,HashMap就扩容,扩容带来一系列的运算,新建一个是原来容量2倍的数组,对原有元素全部重新哈希,如果你的数据有几千几万个,而用默认的HashMap构造函数,那结果是非常悲剧的,因为HashMap不断扩容,不断哈希,在使用HashMap的场景里,不会是多个线程共享一个HashMap,除非对HashMap包装并同步,由此产生的内存开销和cpu开销在某些情况下可能是致命的。
0 0
- java中hashmap的实现原理以及hashmap的正确使用
- Hashmap的原理以及实现
- Java中HashMap的实现原理
- java中Hashmap的实现原理
- java中Hashmap的实现原理
- java中Hashmap的实现原理
- Java中HashMap的实现原理
- Java集合中HashMap的实现原理
- Java中HashMap的实现原理
- Java中HashMap的实现原理分析
- Java中HashMap的实现原理
- Java中HashMap的实现原理
- Java中HashMap的实现原理
- Java中HashMap的实现原理
- Java中HashMap的实现原理
- Java中HashMap的实现原理
- Java中HashMap的实现原理
- Java的HashMap实现原理
- C++学习笔记6,表达式的短路逻辑
- android listview滑动删除
- JSONObject和JSONArray对象的创建方法
- 队列与栈相互模拟的读书笔记
- A good start is already half way to success
- java中hashmap的实现原理以及hashmap的正确使用
- linux之间文件传输
- node 暴漏模块中的api(转自了不起的node)
- initWithNibName、initWithCoder、awakeFromNib和 loadNibNamed详解
- ajax
- Looper翻译
- Android
- uva11475
- 用Visual Studio2013 express生成64位dll