【问题标题】:Why AND(&) operator used calculating final index in Hashmap why not modulo(%) operator i.e hashValue & ()为什么 AND(&) 运算符用于计算 Hashmap 中的最终索引 为什么不使用模(%) 运算符,即 hashValue & ()
【发布时间】:2020-12-12 01:07:23
【问题描述】:

我正在尝试了解 HashMap 的实现。我发现在计算关键哈希值后,最终哈希值是使用 AND 运算符 (hashValue & (n-1)) 生成的,其中 n 是存储桶的大小。有人可以解释为什么不使用模数,这也将保证输出范围在存储桶大小内。

【问题讨论】:

    标签: java hash hashmap


    【解决方案1】:

    & 跑得更快,以换取只为 2 次方工作。 (具体来说,x & (n - 1) == x % n 如果x 是非负数且n 是2 的幂。x & (n - 1) 也可以为哈希表做你想要的——即使x 是负数,x & (n - 1) 也不是-- 不像x % n。)

    这是完整且唯一的原因。

    【讨论】:

    • 还需要注意的是,当 n 是 2 的幂时,%n&(n-1) 是等价的。不清楚 OP 是否理解这一点。
    猜你喜欢
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多