java - HashMap 是如何决定把东西放在哪里的呢?

标签 java hashmap

<分区>

HashMap 中的 add 方法如何确定一个键在 HashMap 中的位置?例如,如果我试图将“S”、“T”、“A”、“C”、“K”放入大小为 10 的 HashMap,它如何确定每个字母的位置?

最佳答案

对象哈希码的最低有效位用于选择一个桶。请注意,没有大小为 10 的 java.util.HashMap 之类的东西,大小必须是 2 的幂,以便可以屏蔽位以选择存储桶。如果将 10 传递给构造函数,您将得到一个返回 16 个桶的 HashMap。

因此,为了清楚起见,减少到 8 位,如果“S”返回哈希码 123,java 就可以了

01111011 & 00001111 -> 00001011

将S放入桶11。

真正的 Hash Map 还应用了一个二次哈希函数,该函数将位向右移动,以确保在最低有效位中存在具有一定熵的数据,这样即使它们的 hashCode 函数不正确,事物也有很好的机会均匀分布太好了。

关于java - HashMap 是如何决定把东西放在哪里的呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15794767/

相关文章:

java - 如何更改 JMeter 的字体大小?

java - 属性(property)位置

java - SetSize() 无法正常工作 : selenium + java

java - ConcurrentModificationException,我想删除 HashMap 值中的相同名称

java - 如何修复接收对象数组的静态泛型方法

list - 从 API 获取值后从 Map<String, dynamic> 中检索值

java - 是否有任何工具使用 hamcrest Factory 注释?

java - 为什么输出存在差异

c++ - 即使键相等,hash_map 也会保存每个键/值对

java - 如何访问 Hashmap 的键并将它们与预定值进行比较?