- HashMap
- 数据结构: 数组+链表 + 红黑树(1.8)
- 实现Map接口
- 继承AbstractMap类
- K ,V 存储 ,KV 可null
- 非Synchronized
- 线程不安全
- HashTable
- 实现Map接口
- 继承Dictionary类
- K,V 存储,KV 不可null
- Synchronized
- 线程安全
- 并发-Collections.synchronizedMap
- HashTable 相似
- 并发-ConcurrentHashMap
- 数据结构: 分段数组+链表 + 红黑树(1.8)
- HashTable 友好替代,比HashTable 扩展性好
- jdk1.7
- 分段锁机制
- size & containsValue 全局锁
- 由Segment 数组组成,长度默认16,不可扩容;负载因子给Segment使用的。继承ReetrantLock
- 源码分析: http://www.importnew.com/28263.html
- jdk1.8
- 取消分段锁 Seqments 改为HashEntry[],改为Node + CAS+ synchrnoized 控制并发
- 数组+链表 改为 数组+ 链表 + 红黑树
- 获取size
- 通过累加baseCount和CounterCell数组中的数量,即可得到元素的总个数;
- 如果还是采用单向列表方式,那么查询某个节点的时间复杂度为O(n);因此,对于个数超过8(默认值)的列表,jdk1.8中采用了红黑树的结构,那么查询的时间复杂度可以降低到O(logN),可以改进性能。
- 参考资料
基础篇-比较HashMap,HashTable,ConcurrentHashMap,Collections.synchronizedMap
最新推荐文章于 2021-06-30 11:46:46 发布