HashSet是用来存储不同元素的容器,可以用来去重元素。HashSet的内部结构就是一个transient  HashMap<E, Object>.  HashSet 构造函数就是new HashMap<>(),可以通过构造函数的传参来new 一个指定大小的HashMap. HashMap种的key存储了添加到HashSet的值, HashMap的值存的都是同一个Dummy的Object, 没有实质意义。

使用trasient HashMap, 在序列化和反序列化时,通过writeObject和readObject方式把hashMap写出和读入重新构建HashMap.

构造函数有以下4种:
1.
public HashSet() {
      map = new HashMap<>();
}2.
public HashSet(Collection<? extends E> c) {
      map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
      addAll(c);
}3.
public HashSet(int initialCapacity, float loadFactor) {
      map = new HashMap<>(initialCapacity, loadFactor);
}4.
public HashSet(int initialCapacity) {
      map = new HashMap<>(initialCapacity);
}

5. add(E e):boolean, 添加一个新元素,就是往hashMap put一个key 为e的entry. 

6. contains(Object o):boolean, 判断hashSet是否存在该值,实质就是调用map.containsKey(o).

7. remove(Object o):boolean, 移除HashMap中的该元素。

8. clear(), 情况hashSet, 就是调用了map.clear().

9. size():int, hashSet的大小,调用map.size().

10. isEmpty(): 判断hashSet是否为空, 调用map.isEmpty()