HashMap 整理

HashMap 1.7 和 HashMap1.8 有比较大的区别,可以说1.8有很大的改进。而其中的默认初始化容量16,负载因子0.75,扩容2倍,基本没变。

  • 扩容

1)1.7版本的时候,HashMap的数据结构是:数组 + 链表(Entry)

        扩容条件: 同时满足,所有Entry加起来大于等于阈值(负载因子乘以初始化容量)和hash碰撞,二者缺一不可。

        Hash 碰撞:通过 key 部分进行hash计算,得出的数组下标的值,如果原来这个数组下标位置原来已经有元素了(默认Entry是null),就会产生Hash碰撞。

        过程:我们使用put()方法的时候,会调用addEntry()方法,然后进行判断是否需要扩容,如果需要就调用resize()方法创建一个2倍大的数组,并调用transfer()方法将原来这里面的Entry搬运过来。而搬过来时会对Entry进行rehash(重新计算hash值),得到新的数组下标。这时,相邻两个Entry有可能还是会进到同一个链表上,而插入的方法是头插法,如果原来的链表全都还在同个链表上,就会顺序变反了。

如果只满足:所有Entry加起来大于等于阈值,那么最大容量是16(一直没有发生hash碰撞),第17个才会扩容  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值