hashmap hashtable ConcurrentHashMap 扩容

13 篇文章 0 订阅
4 篇文章 0 订阅

hashmap扩容:

默认大小: 16, 增长因子:0.75

扩容点规则(什么时候扩容): 16*0.75=12

存储方式:数组+链表

扩容方法:扩容为原来的2倍

出现于:JDK1.2

扩容条件:

1、判断当前个数是否大于等于阈值

2、当前存放是否发生哈希碰撞

 

hashtable扩容:

默认大小: 11, 增长因子:0.75

扩容点规则(什么时候扩容): 11*0.75=12, (int)Math.min(newCapacity * loadFactor, MAX_ARRAY_SIZE + 1); MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

存储方式:数组+链表

扩容方法:扩容为原来的2倍+1

出现于:JDK1.0

 

ConcurrentHashMap 扩容:

默认大小: segment位16个,桶的数量是16,桶内hash表的数量是1,加载因子是0。75。

扩容点规则(什么时候扩容):

当往hashMap中成功插入一个key/value节点时,有可能触发扩容动作:

1、如果新增节点之后,所在链表的元素个数达到了阈值 8,则会调用treeifyBin方法把链表转换成红黑树,不过在结构转换之前,会对数组长度进行判断,实现如下:

如果数组长度n小于阈值MIN_TREEIFY_CAPACITY,默认是64,则会调用tryPresize方法把数组长度扩大到原来的两倍,并触发transfer方法,重新调整节点的位置。

2、新增节点之后,会调用addCount方法记录元素个数,并检查是否需要进行扩容,当数组元素个数达到阈值时,会触发transfer方法,重新调整节点的位置。

存储方式:segment+数组+链表

扩容方法:

出现于:JDK1.5

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值