编辑
2024-02-05
面试题库
0
请注意,本文编写于 352 天前,最后修改于 212 天前,其中某些信息可能已经过时。

为什么hashcode还要异或计算?

^异或运算:相同置0,不同置1。0和1的概率都为1/2。

js
0^1 = 1 1^1 = 0 1^0 = 1 0^0 = 0

& 与运算:两个同时为1,结果为1,否则为0。结果偏向0。

js
1&1 = 1 1&0 = 0 0&0 = 0 0&1 = 0

| 或运算: 只要有1 结果就为1。结果偏向1

js
1|1 = 1 1|0 = 1 0|0 = 0 0|1 = 1

为什么要右移16位?

保证高16位也参与计算, 我们直到int占4字节 32位,16是中位数

因为大部分情况下,都是低16位参与运算,高16位可以减少hash冲突

这会衍生一个疑惑 如果高16位都为0呢?

即使高位为0,异或特性: 0 异或任何数 都为任何数它本身 ,那就是返回key.hashCode() ,不会影响它本身。

本文作者:whitebear

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!