1. 程式人生 > >Java原始碼之HashSet和TreeSet

Java原始碼之HashSet和TreeSet

建構函式

    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裡的元素。