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,结果索引与之前不同,如何找到之前设置的条目呢?
我的最后一个问题是:
增加大小后,桶的索引如何保持相同?
简单的答案是桶的索引不一定相同。HashMap必须在扩展时对所有元素执行重新哈希。
请参阅以下方法:
/**
* Transfers all entries from current table to newTable.
*/
void transfer(Entry[] newTable, boolean rehash) {
Run Code Online (Sandbox Code Playgroud)
这是由 调用的resize。JavaDoc 说
将此映射的内容重新散列到具有更大容量的新数组中。当该映射中的键数达到其阈值时,会自动调用此方法。
强调我的
也可以看看: