我正在努力理解HashMap的实现。我发现在计算了密钥哈希值后,最终的哈希值是使用AND运算符(hashValue&(n-1((生成的,其中n是bucket的大小。有人能解释一下为什么不使用模,这也保证了输出范围在桶大小内。
&
运行速度更快,以换取仅为二次方工作。(具体地说,如果x
是非负的,而n
是2的幂,则为x & (n - 1) == x % n
。与x % n
不同,x & (n - 1)
也可以对哈希表执行您想要的操作——即使x
是负的,x & (n - 1)
也不是。(
这是唯一的原因。