HashSet 实现了Set接口,它的底层是HashMap的key集合,所以它私有属性之一如下:
private transient HashMap<E,Object> map;
构造方法
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);
}
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
public HashSet(int initialCapacity) {
map = new HashMap<>(initialCapacity);
}
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
//其实我不是很清楚这个布尔值放这里有啥用,望告知。
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
常用方法
1. size()
public int size() {
return map.size();
}
返回map的size。
2. contains(Object o)
public boolean contains(Object o) {
return map.containsKey(o);
}
查看map中是否含有这个key。
3. add(E e)
private static final Object PRESENT = new Object();
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
往map中放入一对key为e的键值对,其中的值为PRESENT,由此看出,一个HashSet底层的map所有的key都对应同一个value,即多对一。
4. remove(Object o)
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
直接调用map的remove方法。