为什么 AND(&) 运算符在 Hashmap 中使用计算最终索引,为什么不使用模 (%) 运算符,即 hashValue &()



我正在努力理解HashMap的实现。我发现在计算了密钥哈希值后,最终的哈希值是使用AND运算符(hashValue&(n-1((生成的,其中n是bucket的大小。有人能解释一下为什么不使用模,这也保证了输出范围在桶大小内。

&运行速度更快,以换取仅为二次方工作。(具体地说,如果x是非负的,而n是2的幂,则为x & (n - 1) == x % n。与x % n不同,x & (n - 1)也可以对哈希表执行您想要的操作——即使x是负的,x & (n - 1)也不是。(

这是唯一的原因。

最新更新