HashMap hash算法之位运算 ^
围绕问题:为什么要使用异或 ^
采用&运算计算出来的值会向0靠拢,采用|运算计算出来的值会向1靠拢,
所以^ 是个折中选择,更具随机性。
接下来对 & | ^ 三种运算进行分析,你就知道为什么选择 ^ 了
& 运算有4种情况,如下:(规则:都为真,则为真)
- true & true 结果:true
- true & false 结果:false
- false & false 结果:false
- false & true 结果:false
结论: & 符号得出 true 的概率为 1/4 ,所以值更向0靠拢,不利于计算hash 槽位置。
| 运算有4种情况,如下:(规则:有一个为真,则为真)
- true | true 结果:true
- true | false 结果:true
- false | false 结果:false
- false | true 结果:true
结论: | 符号得出 true 的概率为 3/4 ,所以值更向1靠拢,计算hash 槽位置更容易发生hash冲突。
^ 运算有4种情况,如下:(规则:相同为0,不同为1)
- true | true 结果:false
- true | false 结果:true
- false | false 结果:false
- false | true 结果:true
结论: | 符号得出 true 的概率为 1/2 ,概率来讲相对于前面2种更合适。