HashMap:为什么容量总是为2的n次幂
1)、HashMap是根据key的hash值决定key放到哪个桶中,通过tab[i = (n - 1) & hash]公式计算得出

这里的n是HashMap的容量,因为n永远是2的次幂,所以n - 1通过二进制表示,永远都是末尾连续1的形式表示(如00001111、00000011),当(n - 1) 和hash做与运算时,会保留hash中后x位的1

例如00001111 & 10000011 = 00000011

这样做的好处在于:

&运算速度快,至少比%取模运算快

能保证索引值肯定在HashMap的容量大小范围内

(n - 1) & hash的值是均匀分布的,可以减少hash冲突
————————————————
版权声明:本文为CSDN博主「邋遢的流浪剑客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40378034/article/details/88220732

最新文章

  1. #ifndef
  2. 在myeclipse下安装svn的几种方式
  3. arguments.callee 调用自身 caller,callee,apply and call
  4. 解决IE6不支持position:fixed的bug
  5. Node.js 常用工具 util
  6. 《Diagnostic use of facial image analysis software in endocrine and genetic disorders: review, current results and future perspectives》学习笔记
  7. Jfreechart 乱码
  8. php gd 生成日历图
  9. 使用modelsim仿真DDR3时编译出错的解决方法
  10. 下载jdk-api 1.7文档
  11. 【转】 boot.img的解包与打包
  12. <video>和<audio>标签,对视频和音频的支持
  13. 【ANT】创建删除目录,复制移动重命名文件
  14. 【转】UNIX时间戳与.net日期类的转换
  15. TCHAR字符串查找&反向查找字符串
  16. flex 增长与收缩
  17. 网站 HTTP 升级 HTTPS 完全配置手册
  18. 实战ELK(3) Kibana安装与简单实用
  19. 从零开始学 Web 之 JavaScript(四)数组
  20. oracle11g-linux 归档处理

热门文章

  1. matlab文件处理
  2. 面试突击24:为什么wait和notify必须放在synchronized中?
  3. JDK、JRE 和 JVM 有什么用,它们是怎样运行的
  4. linux 测试机器端口连通性方法
  5. 60天shell脚本计划-10/12-渐入佳境
  6. docker学习笔记(1)——ubuntu16.04安装docker(含如何彻底卸载docker,docker拉取镜像失败解决)
  7. C#-使用Newtonsoft.Json实现json字符串与object对象互转
  8. 穿透、击穿、雪崩…Redis这么多问题,如何解决?
  9. Linux swap分区操作
  10. tp5 缩略图自写