我试图理解hashmap的实现。我发现在计算了密钥散列值之后,最终的散列值是使用and运算符(hashvalue&(n-1))生成的,其中n是bucket的大小。有人能解释为什么不使用modulo,这也将保证bucket大小内的输出范围吗。
ki1q1bka1#
& 跑得更快,换来的是只为两个幂工作(明确地, x & (n - 1) == x % n 如果 x 是非负的 n 是二的幂。 x & (n - 1) 也做了你想要的哈希表——即使 x 是阴性, x & (n - 1) 不是——不像 x % n .)这是唯一的原因。
&
x & (n - 1) == x % n
x
n
x & (n - 1)
x % n
1条答案
按热度按时间ki1q1bka1#
&
跑得更快,换来的是只为两个幂工作(明确地,x & (n - 1) == x % n
如果x
是非负的n
是二的幂。x & (n - 1)
也做了你想要的哈希表——即使x
是阴性,x & (n - 1)
不是——不像x % n
.)这是唯一的原因。