为什么hashmap的容量永远要是2的次方
2024-09-27 20:06:30
源码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的散列,虽然引入了红黑树,但是还是要尽可能的避免冲突发生。
最新文章
- 使用AFNetWorking上传图片
- Linux硬链接和软链接
- HashMap与ConcurrentHashMap的区别
- python-print
- app开发遇到问题及解决
- NET中的类型和装箱/拆箱原理
- 实战Django:官方实例Part4
- JavaScript 之 使用 XMLHttpRequest 预览文件(图片)
- 关于Oracle SQL/82标准和SQL/92标准
- ASP.NET农历时间显示(两)
- LOOPS
- iabtis初探
- 关于hasnextLine()方法的一些理解
- Linux环境下发布.net core
- java中的时间类型
- verilog-产生axis数据流
- java调用dll
- 让网站和APP更具动感的几点建议
- Pyplot tutorial,Pyplot官方教程自翻译
- 20155231 2016-2017-2 《Java程序设计》第7周学习总结