我的 friend 今天问我一个面试问题。
有没有办法防止/避免Hashmap?面试官给了个线索,有个hook可以避免rehashing
我尝试查看 HashMap 代码,看起来它一达到负载因子就会重新散列
将负载因子设置为更高的值只能延迟重新散列过程
我很困惑是否有可能防止重新散列
如果有人能指出正确的方向,它会有所帮助
最佳答案
是的,如果您事先知道 hashmap 的大小,就可以避免这种情况。
设置loadFactor
= 1(默认值为0.75)
initialCapacity
= hashmap 的大小 + 1
(默认值为 16)。
使用下面的构造函数来实例化你的 HashMap
public HashMap(int initialCapacity, float loadFactor)
这将起作用,因为在 HashMap 类的以下代码片段中,永远不会满足条件 (size >= threshold)
,因此永远不会调整哈希表的大小。
void addEntry(int paramInt1, K paramK, V paramV, int paramInt2)
{
if ((size >= threshold) && (null != table[paramInt2]))
{
resize(2 * table.length);
paramInt1 = null != paramK ? hash(paramK) : 0;
paramInt2 = indexFor(paramInt1, table.length);
}
createEntry(paramInt1, paramK, paramV, paramInt2);
}
关于java - HashMap 中可以避免重新哈希吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38237519/