我经常看到这样的代码
int hashCode(){
return a^b;
}
为什么要进行异或?
最佳答案
在所有位操作中,XOR 具有最好的位混洗属性。
这个真值表解释了原因:
A B AND
0 0 0
0 1 0
1 0 0
1 1 1
A B OR
0 0 0
0 1 1
1 0 1
1 1 1
A B XOR
0 0 0
0 1 1
1 0 1
1 1 0
正如您所见,AND 和 OR 在混合位方面表现不佳。
OR 平均会产生 3/4 个一位。另一方面,AND 将产生平均 3/4 的空位。只有 XOR 具有均匀的一位与空位分布。这使得它对于哈希码生成非常有值(value)。
请记住,对于哈希码,您希望使用尽可能多的 key 信息并获得良好的哈希值分布。如果使用 AND 或 OR,您将得到偏向于带有大量 0 的数字或带有大量 1 的数字的数字。
关于hash - 为什么java hashCode()中经常使用XOR,而其他按位运算符却很少使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2334218/