secondaryHash(Object key)实现说明

时间:2014-05-06 07:35:26

标签: java hashmap

以下是来自HashMap包的java.util实施方法:

static int secondaryHash(Object key) {
    int hash = key.hashCode();
    hash ^= (hash >>> 20) ^ (hash >>> 12);
    hash ^= (hash >>> 7) ^ (hash >>> 4);
    return hash;
}

有人可以解释一下这些^=>>>^是什么以及这里发生了什么?

2 个答案:

答案 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;
}