HashSet是依赖于HashMap的Set接口的实现,实际上是个HashMap的实例。HashSet的特点是不保证set的迭代顺序,特别是它不保证该顺序恒久不变,允许使用null 元素。HashSet是依赖于HashMap的。所以HashSet的数据结构也是哈希表+链表+红黑树。

定义

public class HashSet<E> extends AbstractSet<E> implements Set<E>, 
Cloneable, java.io.Serializable
  • HashSet:说明它支持泛型。
  • extends AbstractSet:继承了AbstractSet,实现Set接口时需要实现的工作量大大减少了。
  • implements Set:实现了Set,实现了Set中声明的操作set的基本方法。
  • implements Cloneable:表明其可以调用clone()方法来返回实例的field-for-field拷贝。
  • implements Serializable:表明该类是可以序列化的。

构造方法

HashSet有5种构造方法:

  1. public HashSet():构造一个新的空set,其底层HashMap实例的默认初始容量是 16,加载因子是0.75。
  2. public HashSet(Collection<? extends E> c):构造一个包含指定集合c中的元素的新set。使用默认的加载因子0.75和足以包含指定指定集合c中所有元素的初始容量来创建HashMap。
  3. public HashSet(int initialCapacity, float loadFactor):构造一个新的空set,其底层HashMap实例具有指定的初始容量initialCapacity和指定的加载因子loadFactor。
  4. HashSet(int initialCapacity):构造一个新的空set,其底层HashMap实例具有指定的初始容量initialCapacity和默认的加载因子(0.75)。
  5. HashSet(int initialCapacity, float loadFactor, boolean dummy):构造一个新的空set。这个构造方法仅仅被LinkedHashSet使用。