playground

HashSet

版本

HashMap是一种常见的Set接口的实现,不包含重复的元素,其层次结构如下。

HashSet是基于HashMap实现的,因此HashSet代码量远少于HashMap

HashSet()

无参构造器和其它几个带参构造器的主要工作就是把map字段初始化为一个HashMap类型的实例。

private transient HashMap<E,Object> map;

public HashSet() {
    map = new HashMap<>();
}

HashSet(int, float, boolean)

该方法是唯一一个把map字段初始化为一个LinkedHashMap实例的构造器,LinkedHashMapHashMap的子类。

HashSet(int initialCapacity, float loadFactor, boolean dummy) {
    map = new LinkedHashMap<>(initialCapacity, loadFactor);
}

add(E)

增加元素的操作底层调用的是Mapput()方法,PRESENT对象是一个静态常量,在这里没有实际含义,仅仅是因为put()方法必须传入一个键值对。

private static final Object PRESENT = new Object();

public boolean add(E e) {
    return map.put(e, PRESENT)==null;
}

remove(Object)

移除元素的方法同样也是调用Mapremove()方法。

public boolean remove(Object o) {
    return map.remove(o)==PRESENT;
}

contains(Object)

底层调用MapcontainsKey方法。

public boolean contains(Object o) {
    return map.containsKey(o);
}