Understanding strange Java hash function

7 浏览
0 Comments

Understanding strange Java hash function

以下是java.util.HashMap中一个哈希函数的源代码。注释已经很好地解释了它的功能。但是如何实现的呢?^>>>>运算符是做什么的?有人能解释一下代码是如何实现注释中所说的功能吗?

/**

* 对给定的hashCode应用一个补充哈希函数,以防止质量较差的哈希函数。这很关键,因为HashMap使用长度为2的幂的哈希表,否则会出现哈希码在低位没有差异的冲突。注意:空键始终映射到哈希0,因此索引0。

*/

static int hash(int h) {

// 此函数确保仅仅在每个位位置上有常量倍数差异的哈希码具有有限数量的冲突(默认加载因子下大约为8)。

h ^= (h >>> 20) ^ (h >>> 12);

return h ^ (h >>> 7) ^ (h >>> 4);

}

0