java—为什么和(&)运算符用于计算hashmap中的最终索引为什么不使用模(%)运算符,即hashvalue&()

laximzn5  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(278)

我试图理解hashmap的实现。我发现在计算了密钥散列值之后,最终的散列值是使用and运算符(hashvalue&(n-1))生成的,其中n是bucket的大小。有人能解释为什么不使用modulo,这也将保证bucket大小内的输出范围吗。

ki1q1bka

ki1q1bka1#

& 跑得更快,换来的是只为两个幂工作(明确地, x & (n - 1) == x % n 如果 x 是非负的 n 是二的幂。 x & (n - 1) 也做了你想要的哈希表——即使 x 是阴性, x & (n - 1) 不是——不像 x % n .)
这是唯一的原因。

相关问题