创建HashMap时设置初始化容量为什么是((float)s / loadFactor) + 1.0F?

问题

读完大H的文章关于HashMap容量的初始化,还有这么多学问,了解到HashMap的初始化容量应该为((float)s / loadFactor) + 1.0F,具体关于负载因子、扩容等机制可以看看大H的这篇文章。看完这篇文章后,有个问题还未解决:既然HashMap的容量在size>capacity*loadFactor时会扩容,那么简单的将初始容量设置为((float)s / loadFactor)即可,为什么要在后面+1.0F呢?

解决

百度未果后直接google搜索((float)s / loadFactor) + 1.0F,遂在stackoverflow看到这个问题和答案:

  1. HashMap底层的table在entry_count>table_size*load_factory时会扩容。
  2. 为了不让HashMap扩容,需要table_size >= entry_count / load_factor
  3. 公式((float)s / loadFactor) + 1.0F中的size是使用float计算的,+1.0F是因为((float)s / loadFactor)使用float计算,在转换成整数的时候会进行舍入,为了保证最终计算出来的size足够大不至于触发扩容,所以进行了+ 1.0F操作。

stackoverflow问题链接about Java 8 Hashmap source: “+1.0F”

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值