在Java中的HashMap实现中,在计算了密钥对象的哈希值之后,我想在其上使用函数hash(int hashvalue)来进一步随机化生成的哈希值。因为它正确移位,它会更多地随机化LSB位。他们为什么不通过左移Shift来随机化MSB?
而不是像
h ^ =(h>>> 20)^(h>>> 12); //这里来自右边21位的位不变 //考虑输入的哈希值在范围(2 ^ 21) - (2 ^ 22)的情况下,值将分布在具有索引的桶中(2 ^ 21) - (2 ^ 22)并且哈希映射中剩余的桶未使用。
返回h ^(h>>>> 7)^(h>>> 4); //将LSB部分随机化。
为什么他们不能做像
这样的事情h ^ =(h>>> 20)^(h>>> 12)^(h<<<<<<<<<<<<<<<<<<" 12); //这使LSB位和MSB位随机化
返回h ^(h>>>> 7)^(h>>> 4)^(h<<<<<<<<<<<<<<<<<<<< 4);
结果我们将获得一个随机数字,其中包含随机的MSB和LSB位。