-2

HashSet 和 HashMap 有什么关系?

从 javadoc

HashSet

public HashSet()

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

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

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

4

3 回答 3

1

HashSet在以下方面实施HashMap

这个类实现了Set接口,由一个哈希表(实际上是一个HashMap实例)支持。

文档中解释了负载因子:

HashMap 的实例有两个影响其性能的参数:初始容量和负载因子。容量是哈希表中的桶数,初始容量只是哈希表创建时的容量。负载因子是哈希表在其容量自动增加之前允许达到的程度的度量。当哈希表中的条目数超过负载因子和当前容量的乘积时,对哈希表进行重新哈希(即重建内部数据结构),使哈希表的桶数大约增加一倍。

作为一般规则,默认负载因子 (.75) 在时间和空间成本之间提供了良好的折衷。较高的值会减少空间开销,但会增加查找成本(反映在 HashMap 类的大多数操作中,包括 get 和 put)。在设置其初始容量时,应考虑映射中的预期条目数及其负载因子,以尽量减少重新哈希操作的次数。如果初始容量大于最大条目数除以负载因子,则不会发生重新哈希操作。

于 2013-06-29T15:37:02.167 回答
0

HashSet 和 HashMap 有什么关系?

关系是每个内部HashSet<T>都有一个私有的HashMap<T, Object>。(在 Java 7 版本中,值是私有Object实例......)

“负载系数”是什么意思?

术语“负载因子”在javadoc中为HashMap. 你可以在那里阅读它。(这就是它写的目的......)

参考:

于 2013-06-29T15:36:34.557 回答
0

来自HashSet的源码

public HashSet(Collection<? extends E> c) {
    map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16));
    addAll(c);
}
于 2013-06-29T15:37:15.980 回答