以下是来自HashMap
包的java.util
实施方法:
static int secondaryHash(Object key) {
int hash = key.hashCode();
hash ^= (hash >>> 20) ^ (hash >>> 12);
hash ^= (hash >>> 7) ^ (hash >>> 4);
return hash;
}
有人可以解释一下这些^=
,>>>
,^
是什么以及这里发生了什么?
答案 0 :(得分:3)
x ^= y
:是x = x ^ y
的简写操作符。
^
:是二进制异或操作符 XOR 。
y >>> x
:是二进制移位运算符,它将 y x 位的所有位向右移位,同时填充 0 -bits到左边。这意味着如果初始值为负数,则不会保留符号。
答案 1 :(得分:0)
^
运算符执行两个整数的bitwise XOR。
除^=
外,+=
与^
类似。
运算符>>>
是一个逻辑右移,它将每个位向右移动,移除那些从右侧掉落的位。左侧0
已填写。
static int secondaryHash(Object key) {
int hash = key.hashCode();
hash ^= (hash >>> 20) ^ (hash >>> 12); // Set hash to equal to bitwise XOR of it with itself right shifted by 20 and right shifted by 12.
hash ^= (hash >>> 7) ^ (hash >>> 4); // Same thing for right shift by 7 and right shift by 4.
return hash;
}