gpt4 book ai didi

java - 为什么HashMap使用长度减1来计算索引?

转载 作者:行者123 更新时间:2023-12-01 19:40:40 25 4
gpt4 key购买 nike

我正在分析jdk7HashMap的源码,发现当我们调用put()添加元素的方法,会使用indexFor()计算索引并将元素存储到数组中,方法如下。

现在我想知道为什么它使用 h & (length-1) 来获取索引?它是用于获取更多随机数组索引吗?我们可以使用 lengthlength-2(如果存在)来代替吗?

谁能帮我理解这一点?提前致谢!

static int indexFor(int h, int length) {
// assert Integer.bitCount(length) == 1 : "length must be a non-zero power of 2";
return h & (length-1);
}

最佳答案

Is it used for to get more random array index?

没有

Can we use length or length-2(if exists) instead?

没有

这只是一个数学技巧。要将 HashMap 到[0, L)范围,您需要计算hash % L。除法的成本可能很高,因此开发人员选择利用数字以二进制存储的方式。这仅适用于 2 的幂,因为仅设置了一位,减去 1 会设置所有较低有效位并取消设置原始位。将其与我们的散列进行二进制与运算具有与计算模相同的结果,比我们可以处理的更重要的每一位都被丢弃。

关于java - 为什么HashMap使用长度减1来计算索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55486773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com