HashMap和HashSet之间的关系

时间:2013-06-29 15:34:37

标签: java hashmap hashset

HashSet和HashMap之间的关系是什么?

From javadoc

HashSet

public HashSet()

Constructs a new, empty set; the backing HashMap instance has default initial 
     

容量(16)和负载系数(0.75)。

“负载系数”是什么意思? 提前谢谢。

3 个答案:

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