当 HashMap 的大小增加时,其值的索引会发生什么情况?

gib*_*iga 6 java hash dictionary hashtable hashmap

据我所知,当我们声明如下所示的地图时:

Map <String, Integer> map = new HashMap ();
Run Code Online (Sandbox Code Playgroud)

默认负载因子为0.75,大小为16,当map的桶数超过12个元素时,大小变为32。

然而,在使用 put 函数时,map 选择要放置对象的存储桶索引的方式是由以下定义的,hascode % n但是当 Map 大小超过负载因子时会发生什么?n 不再具有相同的值,因此,如果在应用 时hascode % n,结果索引与之前不同,如何找到之前设置的条目呢?

我的最后一个问题是:

增加大小后,桶的索引如何保持相同?

Mic*_*ael 8

简单的答案是桶的索引不一定相同。HashMap必须在扩展时对所有元素执行重新哈希。

请参阅以下方法:

/**
 * Transfers all entries from current table to newTable.
 */
void transfer(Entry[] newTable, boolean rehash) {
Run Code Online (Sandbox Code Playgroud)

这是由 调用的resize。JavaDoc 说

将此映射的内容重新散列到具有更大容量的新数组中。当该映射中的键数达到其阈值时,会自动调用此方法。

强调我的

也可以看看: