HashMap 中的 add 方法如何确定键在 HashMap 中的位置?比如,如果我试图将“S”、“T”、“A”、“C”、“K”放入大小为 10 的 HashMap 中,它如何确定每个字母的去向?
问问题
142 次
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 回答