1

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

4

1 回答 1

4

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

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

01111011 & 00001111 -> 00001011

并将 S 放入桶 11。

真正的 Hash Map 还应用了一个二级散列函数,该函数向右移动位以确保在最低有效位中存在具有一些熵的数据,因此即使它们的 hashCode 函数不是那么好,事物也很有可能均匀分布。

于 2013-04-03T18:13:35.447 回答