HashSet源码分析
1、类的基本信息
继承与接口关系:
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
成员变量:
private transient HashMap<E,Object> map;
// 虚拟的值,对应map中的value
private static final Object PRESENT = new Object();
HashSet
底层是基于HashMap实现的。HashSet
里的值对应的是map的key。map的value全部是PRESENT
。
构造方法:
/**
* 默认构造器,HashMap实例默认容量16,负载因子0.75
*/
public HashSet() {
map = new HashMap<>();
}
/*
* 这个包级别访问权限的构造器只被LinkedHashSet使用
*/
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
2、部分方法
add()方法:
public boolean add(E e) {
// 用的就是map的方法 @_@
return map.put(e, PRESENT)==null;
}
remove()方法:
public boolean remove(Object o) {
return map.remove(o)==PRESENT; // 同上
}
contains()方法:
public boolean contains(Object o) {
return map.containsKey(o);
}
用的都是HashMap
的方法。