Map扩容

扩容:
HashMap负载因子0.75,默认容量16
初始容量不能<0,也不能>最大容量
HashMap的最大容量值为2^30
负载因子越大,空间利用越充分,但hash碰撞概率上升;同等数据下,put/get效率低,扩容次数降低
负载因子越小,空间利用率越低,但hash碰撞概率降低;同等数据下,put/get效率高,扩容次数提高

当HashMap底层数据结构链表长度超过8数组长度不超过64时,且元素超过16*0.75=12时,进行扩容,每次扩容容量为之前的2次幂。
1.7:先扩容、后赋值,通过计算hash赋值到新的HashMap中
1.8:直接使用旧hash或索引+旧容量大小请添加图片描述
HashMap使用的是懒加载,构造完HashMap对象后,只要不进行put 方法插入元素之前,HashMap并不会去初始化或者扩容table。

当首次调用put方法时,HashMap会发现table为空然后调用resize方法进行初始化,当添加完元素后,如果HashMap发现size(元素总数)大于threshold(阈值),则会调用resize方法进行扩容
若threshold(阈值)不为空,table的首次初始化大小为阈值,否则初始化为缺省值大小16
重哈希(rehashing):重新调整map的大小,并将原来的对象放入新的bucket数组中。这
数组中的元素只有两种情况:
hash值第N+1位为0:不需要进行位置调整
hash值第N+1位为1:调整至原索引的两倍位置

HashMap扩容高低位
HashMap的数组中的链表或者红黑树节点扩容时,是直接结算hash值原来的最高位对应的二进制数字,如果是1则使用高位索引(原索引位置+容量),如果是0则位置不变

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值