定义HashSet的构造函数时
HashSet<Integer> hs = new HashSet<Integer>(10,(double)0.50);
第二个称为“填充率”的参数的默认值为0.75。
我想知道将其默认为0.75背后是否有合理的原因。
答案 0 :(得分:2)
选择背后确实存在逻辑推理。如果我们了解HashSet
由HashMap
支持并认识到帖子中的构造函数,则调用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类的大多数操作中,包括
get
和put
)。