本文主要是介绍HashMap 中散列值的计算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
HashMap java 1.8 中的源码:
static final int hash(Object key) {int h;return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);}i = (n - 1) & hash
h >>> 16 代表无符号右移,高位补零。
hashCode() 的高16位不变,低16位与高16位异或作为 key的最终 hash 值。
这么做是为了最后避免最后计算索引值只有低位参与。减少碰撞。
将得到的 hash 与通的大小 n - 1 相与得到 key 所在桶的位置。
这里 n 是2的整数幂,所以 (n - 1) & hash 相当于 n % hash 运算,这么做是为了加快运算速度,这也解释了为什么桶的大小要设置为2的整数幂。
这篇关于HashMap 中散列值的计算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!