HashSet的代码量还是很少的,将主要的操作都委托给了HashMap。基于JDK1.8。
支持原创,转载请注明出处。
继承关系
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializabl
public interface Set<E> extends Collection<E>
可以看到Set实现了Collection接口。
核心成员变量
private transient HashMap<E,Object> map;
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
可以看到HashSet内部封装了HashMap,后面将会看到很多操作都委托给了HashMap。
构造函数
public HashSet() {
map = new HashMap<>();
}
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
构造函数也很简单,仅仅是初始化HashMap。
添加元素:add方法
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
将参数e作为key,PRESENT作为value,我们知道key在HashMap里面是唯一的,也就保证了set元素的唯一性。
删除元素:remove方法
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
还是将任务委托给HashMap。
支持原创,转载请注明出处。
github:https://github.com/gatsbydhn