HashMap是如何扩容的

在中的jdk1.8中,HashMap的默认初始大小是16。同时,HashMap有一个加载因子(Load Factor),其默认值为0.75。加载因子是HashMap中元素数量与容量大小的比值,当这个比值超过某个阈值(默认是容量大小乘以加载因子)时,HashMap就会使用resize进行扩容操作。

每次扩容都是扩展2倍。

扩展后的Node对象要么在原位置,要么要移动原偏移量两倍的位置。

在putValue中,函数中使用了两次resize方法。resize方法表示在进行第一次初始化时会对其进行扩容,或者该数组的实际大小大于临界值(第一次为16*0.75=12),这个时候扩容的同时也会伴随上面元素的重新分发,这也是jdk1.8版本的一个优化地方,但在1.8中,则是根据在同一个桶的位置中进行判断(e.hash & oldCap)是否为0,重新进行hash分配后,该元素的位置要么停留在原始位置上,要么移动到原始位置+增加的数组大小这个位置上。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值