为什么HashSet Constructor的默认填充率为0.75?

时间:2016-09-22 06:35:35

标签: java hashset

定义HashSet的构造函数时

HashSet<Integer> hs = new HashSet<Integer>(10,(double)0.50);

第二个称为“填充率”的参数的默认值为0.75。

我想知道将其默认为0.75背后是否有合理的原因。

2 个答案:

答案 0 :(得分:2)

选择背后确实存在逻辑推理。如果我们了解HashSetHashMap支持并认识到帖子中的构造函数,则调用HashMap构造函数:

public HashSet(int initialCapacity, float loadFactor) {
    map = new HashMap<>(initialCapacity, loadFactor);
}

然后继续关联HashMap documentation我们可以看到重要选项背后的逻辑推理。

  

作为一般规则,默认加载因子(.75)提供了一个好处   时间和空间成本之间的权衡。值越高,值越低   空间开销,但增加了查找成本(反映在大多数   HashMap类的操作,包括get和put)。预期的   应该考虑地图中的条目数量及其加载因子   帐户设置其初始容量时,以便最小化   重新运算的次数。如果初始容量大于   条目的最大数量除以加载因子,没有重新哈希   操作将永远发生。

答案 1 :(得分:1)

HashSet支持HashMap,因此您可以参考HashMap's javadoc作为默认值选择0.75背后的理由:

  

作为一般规则,默认负载系数(.75)在时间和空间成本之间提供了良好的权衡。较高的值会减少空间开销,但会增加查找成本(反映在HashMap类的大多数操作中,包括getput)。