<分区>
HashMap 中的 add 方法如何确定一个键在 HashMap 中的位置?例如,如果我试图将“S”、“T”、“A”、“C”、“K”放入大小为 10 的 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/