我朋友今天问我一个面试问题。
有没有办法防止/避免Hashmap?采访者提供了一个线索,可以避免重复使用钩子
我尝试查看HashMap代码,看起来只要它遇到加载因子就会重新出现
将负载系数设置为更高的值只能延迟重组过程
如果可能的话,我会感到困惑,以防止再次发生冲突
如果有人能指出我正确的方向,那就可以提供帮助
答案 0 :(得分:5)
是的,如果事先知道了hashmap的大小,就可以避免这种情况。
设置loadFactor
= 1(默认值为0.75)
initialCapacity
= size of 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);
}