Java原始碼之HashSet和TreeSet
阿新 • • 發佈:2019-02-18
建構函式
public HashSet() {
map = new HashMap<>();
}
add方法
private static final Object PRESENT = new Object();
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
size方法等直接呼叫HashMap的方法
public int size() { return map.size(); } public boolean isEmpty() { return map.isEmpty(); } public boolean contains(Object o) { return map.containsKey(o); } public boolean remove(Object o) { return map.remove(o)==PRESENT; } public void clear() { map.clear(); }
TreeSet的建構函式
TreeSet(NavigableMap<E,Object> m) {
this.m = m;
}
public TreeSet() {
this(new TreeMap<E,Object>());
}
核心資料成員
private transient NavigableMap<E,Object> m;
NavigableMap是一個介面
public interface NavigableMap<K,V> extends SortedMap<K,V>
TreeMap實現了NavigableMap介面
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, java.io.Serializable
public int size() { return m.size(); } public boolean isEmpty() { return m.isEmpty(); } public boolean contains(Object o) { return m.containsKey(o); }
小結:HashSet底層聲明瞭一個HashMap,HashSet做了一層包裝,操作HashSet裡的元素時其實是在操作HashMap裡的元素。TreeSet底層也是聲明瞭一個TreeMap,操作TreeSet裡的元素其實是操作TreeMap裡的元素。