使用Java HashMap中的hash()方法进行随机化

时间:2013-04-14 00:02:02

标签: java hash hashmap bit-manipulation xor

在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位。

0 个答案:

没有答案