首页 > 其他 > 详细

Hash

时间:2021-07-14 10:21:12      阅读:17      评论:0      收藏:0      [点我收藏+]

HashMap:

  数组加链结构,jdk1.8 链表节点数>=8时,变成红黑树,小于6时,又变成链表。线程不安全的,允许key,value为null,但只要一个key可以为null。初始容量16,加载因子为0.75,扩容增量为1倍。按位与来求余数,比求模更快,所以容量是2的幂次方。

 

HashTable:

  父类是dictionary类,比HashMap多两个实现方法:elements,contains;线程安全,效率低,不允许key和value为null,初始容量11, 加载因子为0.75 , 扩容增量:2*原数组长度+1 。

 

concurrentHashMap:

  线程安全,效率比hashtable高,使用分段锁,并不对整个数据进行锁定。 <JDK1.7>, 使用 Segment数组 + HashEntry数组 + 链表 。 分段锁 对整个桶数组进行了分割分段(Segment),每一把锁只锁容器其中一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。
 <jdk1.8> 使用 Node数组+链表+ 红黑树 。
 使用的是优化的synchronized 关键字同步代码块 和 cas操作了维护并发。  简化结构,put和get不用二次哈希,一把锁只锁住一个链表或者一棵树,并发效率更加提升

Hash

原文:https://www.cnblogs.com/holycai/p/15009295.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!