可以在hashmap中避免重新散列吗?

时间:2016-07-07 04:24:03

标签: java hash hashmap

我朋友今天问我一个面试问题。

有没有办法防止/避免Hashmap?采访者提供了一个线索,可以避免重复使用钩子

我尝试查看HashMap代码,看起来只要它遇到加载因子就会重新出现

将负载系数设置为更高的值只能延迟重组过程

如果可能的话,我会感到困惑,以防止再次发生冲突

如果有人能指出我正确的方向,那就可以提供帮助

1 个答案:

答案 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);
}