Java中的HashMap、TreeMap、ConcurrentHashMap

Java中的HashMap、TreeMap、ConcurrentHashMap,第1张

HashMap:

JDK1.8之前:数组挂接链表

JDK1.8之后:数组挂接(链表 or 红黑树)。引入红黑树大程度优化了HashMap的性能,这主要体现在hash算法不均匀时,即产生的链表非常长,这时把链表转为红黑树可以将复杂度从O(N)降到O(lgN)

当负载大于0.75之后,数组扩容(增大一倍);当某个桶的链表过长之后(超过8),链表替换成红黑树;

TreeMap:

1棵红黑树;有序;

synchronized VS. concurrent

HashTable: 线程安全;一把大锁,低效;

ConcurrentHashMap: 线程安全;分段锁,更高效;数组分成16个段,每个段1把独立的锁;读数据不需要上锁,写数据需要上该段的锁;

ConcurrentHashMap如何确保读 *** 作和写 *** 作不冲突:插入节点,在段头部插入;删除节点,通过复制被删节点之前的元素来实现;

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1295224.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存