HashMap 初始容量设置与空间换时间

  • 初始值不等同于容量值.也可能等, 比如值刚好是 2^n.
  • 参考gauva实现,可以使用公式计算出合理的估值: initCapacity=needed * 10 / 7 + 1
    • <===> c = n * 0.7 + 1 == n*10/7 +1
  • 初始容量估算出来后,会使用该值作为参考,取该值大一号的2的指数值的值作为真实的容量.

容量 0.7 计算可能无法除尽, 因此加1便能保证计算的容量必然是保证不触发扩容机制,也就是默认的实际容量的70%.

空间换时间: 因为保证了容量能装下数据不触发扩容,因此, 空间必然是有所浪费的.

比如需要装6对kv值, 6*10/7+1 => 9  8不够装,  6/8=0.75 > 0.7 导致扩容; 6/9=0.666666 < 0.7 不扩容; 此时容量设置为了16 . (2^3=8 , 2^4=16)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值