为什么 AND(&) 运算符使用计算 Hashmap 中的最终索引为什么不使用 modulo(%) 运算符,即 hashValue & ()
Why AND(&) operator used calculating final index in Hashmap why not modulo(%) operator i.e hashValue & ()
我想了解 HashMap 的实现。我在计算键哈希值后发现,最终哈希值是使用 AND 运算符 (hashValue & (n-1)) 生成的,其中 n 是 bucket.Could 的大小 有人解释了为什么不使用模数,这也将保证桶内的输出范围尺寸。
&
运行得更快,以换取只为 2 的幂工作。 (具体来说,x & (n - 1) == x % n
如果 x
是非负数并且 n
是 2 的幂。x & (n - 1)
也做你想要的散列 table —— 即使x
是负数,x & (n - 1)
不是——与 x % n
不同。)
这是完整且唯一的原因。
我想了解 HashMap 的实现。我在计算键哈希值后发现,最终哈希值是使用 AND 运算符 (hashValue & (n-1)) 生成的,其中 n 是 bucket.Could 的大小 有人解释了为什么不使用模数,这也将保证桶内的输出范围尺寸。
&
运行得更快,以换取只为 2 的幂工作。 (具体来说,x & (n - 1) == x % n
如果 x
是非负数并且 n
是 2 的幂。x & (n - 1)
也做你想要的散列 table —— 即使x
是负数,x & (n - 1)
不是——与 x % n
不同。)
这是完整且唯一的原因。