java - HashMap 中可以避免重新哈希吗?

标签 java hash hashmap

我的 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/

相关文章:

java - 检查管理员登录( HashMap )

java - 使用 RestTemplate 时出现异常,消息为 "http protocol is not supported"

java - 在 Java 中检索节点的 XPathExpression 是否正确?

c - 错误 : invalid operands to binary expression

java - 这个需求用什么,Array,List,Map,?

Ruby 将对象转换为哈希

java - 查询数据库时 Google App Engine getJDOExceptionForNucleusException 错误

java - 如何以格式化的方式存储和检索文本数据?

javascript - 在javascript中获取DOM元素哈希?

c++ - 如何在C++中跳到Ofstream对象的下一行