扩容机制中的capacity初始值为什么是16,可不可以自定义成15,为什么一定要是2的指数次方,求指教,感谢

jvliao 2020-12-31 05:09:41
...全文
7357 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
一个帅逼 2020-12-31
  • 打赏
  • 举报
回复
你可以设置15,但是实际会被转换成16,可以看看源码里的tableSizeFor()方法,通过这个方法会将你设置的capacity-1通过位移运算变为最接近的下一个2的n次幂,设置为2的n次方主要是为了快速定位到数组的slot上,2的n次方-1的二进制会使当前capacity的低位全部变为1,再通过与hahs值的&运算可以得到数组slot,区别于取模运算,取模可以设置任何值,但是取模运算效率没有&运算高
是赵敢敢啊 2020-12-31
  • 打赏
  • 举报
回复
写成2的次幂的话计算机做位移预算比较快,应该是这样

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧