HashSet源碼分析——HashSet由哈希表實現java
package java.util; import java.io.InvalidObjectException; import sun.misc.SharedSecrets; public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable { private transient HashMap<E,Object> map; // 無參構造方法 public HashSet() { map = new HashMap<>(); } // 有參構造方法 public HashSet(int initialCapacity, float loadFactor) { map = new HashMap<>(initialCapacity, loadFactor); } // 有參構造方法,建立的是一個LinkedHashMap HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<>(initialCapacity, loadFactor); } // /ˈpreznt/ 如今的 private static final Object PRESENT = new Object(); public boolean add(E e) { /* 若是e是重複的,也就是key相同, * HashMap會用新的value覆蓋舊的value, * 但在這裏其實兩個value是同樣的,都是PRESENT * 接着返回舊的value,不等於null,最後返回false */ return map.put(e, PRESENT)==null; } public boolean remove(Object o) { return map.remove(o)==PRESENT; } }