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()