gpt4 book ai didi

java - HashMap 一个键可能有不同的桶索引吗?

转载 作者:行者123 更新时间:2023-12-02 12:48:30 25 4
gpt4 key购买 nike

我关心的是检查 Java HashMap 如何获取键的相同索引。即使它的大小从默认的 16 扩展到更高的值,因为我们不断添加条目。

我尝试重现HashMap的索引算法。

int length=1<<5;
int v=6546546;
int h = new Integer(v).hashCode();
h =h^( (h >>> 20) ^ (h >>> 12));
h=h ^ h >>> 7 ^ h >>> 4;
System.out.println("index :: " + (h & (length-1)));

我针对不同的“长度”值运行了代码。因此,对于相同的键,随着 HashMap 长度的变化,我会得到不同的索引。我在这里缺少什么?

我的结果:

length=1<<5;
index :: 10

length=1<<15;

index :: 7082

length=1<<30;
index :: 6626218

最佳答案

您忽略了这样一个事实:每次长度发生变化时,条目都会重新分配 - 它们会被适本地放入新的存储桶中。这就是为什么本地图扩展时需要一些时间 (O(N)) - 所有内容都需要从旧存储桶复制到新存储桶。

只要一次只有一种长度的索引(而不是混合),就可以了。

关于java - HashMap 一个键可能有不同的桶索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26025236/

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