为什么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 许可协议。转载请注明出处!