hashMap
来源:互联网 发布:阿里云logo矢量 编辑:程序博客网 时间:2024/06/17 14:45
原文是http://www.importnew.com/7099.html hashMap的工作原理
http://www.codeceo.com/article/why-java-string-class-static.html java字符串为什么是不可变对象
http://stackoverflow.com/questions/22890967/java-hashmap-tail-traversing java hashMap tail traversing
http://zhangshixi.iteye.com/blog/672697 深入java集合学习系列
本文只是将我不懂的东西记录下来:
http://www.codeceo.com/article/why-java-string-class-static.html java字符串为什么是不可变对象
http://stackoverflow.com/questions/22890967/java-hashmap-tail-traversing java hashMap tail traversing
http://zhangshixi.iteye.com/blog/672697 深入java集合学习系列
本文只是将我不懂的东西记录下来:
一,一些优秀的开发者会指出使用不可变的、声明作final的对象,并且采用合适的equals()和hashCode()方法的话,将会减少碰撞的发生,提高效率。不可变性使得能够缓存不同键的hashcode,这将提高整个获取对象的速度。
为何使用不可变对象可以提高效率和安全呢?
因为:
1,安全: 多线程同时操作一个可变对象时,结果不可预测。而不可变对象不会。
2,效率:
2.1 因为不可变,所以可以建立字符串常量池,加速
2.2因为不可变,所以hash值不会变。所以可以算出来后缓存
2.3因为不可变,所以当需要拷贝这个对象的内容时,就不用复制它的本身而只是复制它的地址,复制地址(通常一个指针的大小)需要很小的内存效率也很高。
二,rehashing时,HashMap并不会将元素放在链表的尾部,而是放在头部,这是为了避免尾部遍历(tail traversing)
所谓尾部依赖,是来自于链表的概念。
当链表很长时,每次插入数据若都插到最后一个位置的话,效率就非常低。所以就改为新数据插入头,就快了
三,如果条件竞争发生了,那么就死循环了?
以及为什么说hashMap不是线程安全的。
看完下面这篇文章后豁然开朗,原文用了大量的图例,我就不复述了~
http://coolshell.cn/articles/9606.html 疫苗:hashMap的死循环
0 0
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- hashmap
- HashMap
- HashMap
- HashMap
- hashmap
- HashMap
- Hashmap
- FidderCore
- 大O表示法算法复杂度速查表(Big-O Algorithm Complexity Cheat Sheet)
- 针对iphone4调整样式
- poj 3259 Wormholes(Bellman-ford 算法)
- js构造函数
- hashMap
- 自动填充短信验证码(使用ContentObserver)
- WinForm中的ComoBox选项值的多种加载方法
- hdu5446 lucas+中国剩余定理
- 微信支付客户端开发说明 第一篇
- 转载:那些年他(她)们做过的“蠢事”
- 语义化版本号 Sematic Versioning
- android-async-http源码解读(二)
- strcpy、strncpy代码实现。