源码hashmap.java文件中有个函数叫tableSizeFor(),他的作用是,通过-1>>>n-1返回一个大于n的最小二次幂,n为map之前的容量,而函数返回值就是扩容的二次幂,但是这个不能完美的解释为什么是2次方,然后我从get()找到了getNode()函数,他的参数是被处理过得哈希值,通过hash()返回的哈希值,然后在getNode中有一条语句是(n-1)&hash,确定每个元素的底层数组位置,如果n不是2的次方的话,那么n-1中必然不全为1,则与不同的hash相与得到相同的值的几率很大,因为0不论与1和0相与都是0。

所以我觉得之所以是2的次方,一方面是hashmap从一开始就约定好的逻辑结构,另一方面是为了处理hashmap的散列,虽然引入了红黑树,但是还是要尽可能的避免冲突发生。

最新文章

  1. 使用AFNetWorking上传图片
  2. Linux硬链接和软链接
  3. HashMap与ConcurrentHashMap的区别
  4. python-print
  5. app开发遇到问题及解决
  6. NET中的类型和装箱/拆箱原理
  7. 实战Django:官方实例Part4
  8. JavaScript 之 使用 XMLHttpRequest 预览文件(图片)
  9. 关于Oracle SQL/82标准和SQL/92标准
  10. ASP.NET农历时间显示(两)
  11. LOOPS
  12. iabtis初探
  13. 关于hasnextLine()方法的一些理解
  14. Linux环境下发布.net core
  15. java中的时间类型
  16. verilog-产生axis数据流
  17. java调用dll
  18. 让网站和APP更具动感的几点建议
  19. Pyplot tutorial,Pyplot官方教程自翻译
  20. 20155231 2016-2017-2 《Java程序设计》第7周学习总结

热门文章

  1. [CF1311C] Perform the Combo
  2. gRPC搭建使用方式
  3. python里奇怪的赋值
  4. webstrom 2019 注册码(可用 2019年10月14日08:59:18)
  5. 基于Docker的Consul集群实现服务发现
  6. too many open files异常及解决办法
  7. Spark学习之路 (十二)SparkCore的调优之资源调优[转]
  8. 洛谷【P5004 专心OI - 跳房子】 题解
  9. 使用Office365账号配置SMTP中继服务器
  10. Linux网络课程学习第一天