HashSet和HashMap之间的关系是什么?
HashSet public HashSet() Constructs a new, empty set; the backing HashMap instance has default initial
容量(16)和负载系数(0.75)。
“负载系数”是什么意思? 提前谢谢。
答案 0 :(得分:1)
HashSet
是根据HashMap
:
此类实现
Set
接口,由哈希表(实际上是HashMap
实例)支持。
负载系数在documentation:
中说明HashMap的一个实例有两个影响其性能的参数:初始容量和负载因子。容量是哈希表中的桶数,初始容量只是创建哈希表时的容量。加载因子是在自动增加容量之前允许哈希表获取的完整程度的度量。当哈希表中的条目数超过加载因子和当前容量的乘积时,哈希表将被重新哈希(即,重建内部数据结构),以便哈希表具有大约两倍的桶数。 / p>
作为一般规则,默认负载系数(.75)在时间和空间成本之间提供了良好的权衡。较高的值会减少空间开销,但会增加查找成本(反映在HashMap类的大多数操作中,包括get和put)。在设置其初始容量时,应考虑映射中的预期条目数及其加载因子,以便最小化重新散列操作的数量。如果初始容量大于最大条目数除以负载因子,则不会发生任何重新连接操作。
答案 1 :(得分:0)
HashSet和HashMap之间的关系是什么?
关系是每个HashSet<T>
内部都有一个私有HashMap<T, Object>
。 (在Java 7版本中,值是私有的Object
实例...)
“负载系数”是什么意思?
术语“加载因子”在HashMap
javadoc中定义。你可以在那里阅读它。 (这就是为...写的)。
参考:
答案 2 :(得分:0)
来自HashSet的源代码
public HashSet(Collection<? extends E> c) {
map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}