public class TreeSet<E> extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, java.io.Serializable
这个类继承自AbstractSet类,实现了NavigableSet接口、Cloneable接口和Serializable接口。
private transient NavigableMap<E,Object> m;
这个成员变量是TreeSet的底层Map,为NavigableMap接口的实现。
private static final Object PRESENT = new Object();
这个对象是底层Map的值对象。
TreeSet(NavigableMap<E,Object> m) {
this.m = m;
}
这个构造方法传入一个NavigableMap参数,将参数赋引用给底层map,这个构造方法是留给其他构造方法调用的。
public TreeSet() {
this(new TreeMap<E,Object>());
}
这个无参的构造方法,调用上一个构造方法,传入一个TreeMap参数。
public TreeSet(Comparator<? super E> comparator) {
this(new TreeMap<>(comparator));
}
这个构造方法传入一个Comparator对象,调用那个默认修饰符的构造方法,并为之传入一个TreeMap对象,TreeMap对象传入这个Comparator对象。
public TreeSet(Collection<? extends E> c) {
this();
addAll(c);
}
这个构造方法传入一个Collection实现类参数。首先调用无参构造方法,然后调用本类实现的addAll方法将参数全部添加。
public TreeSet(SortedSet<E> s) {
this(s.comparator());
addAll(s);
}
这个构造方法传入一个SortedSet参数。首先调用那个传入Comparator实现类参数的构造方法,将参数的Comparator属性传入。然后调用addAll方法将参数添加进本集合。
public Iterator<E> iterator() {
return m.navigableKeySet().iterator();
}
这个方法是返回迭代器的方法。将底层map的键集合的迭代器返回。
public Iterator<E> descendingIterator() {
return m.descendingKeySet().iterator();
}
这个方法是返回反向迭代器的方法。将底层map的键集合的反向迭代器返回。
public NavigableSet<E> descendingSet() {
return new TreeSet<>(m.descendingMap());
}
这个方法是返回反向集合的方法。返回一个新的TreeSet然后将底层map的反向Map传入新TreeSet。
public int size() {
return m.size();
}
这个方法返回的是长度,也就是底层map的长度。
public boolean isEmpty() {
return m.isEmpty();
}
这个方法是判断集合是否为空的方法,返回的是底层map是否为空。
public boolean contains(Object o) {
return m.containsKey(o);
}
这个方法是判断本集合是否包含参数对象。其实是判断底层map是否包含参数对象。
public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
这个方法是添加元素的方法,其实是将参数作为底层map的键,那个PRESENT对象作为值。底层map的put方法的返回值是否为空作为这个方法的返回值。
public boolean remove(Object o) {
return m.remove(o)==PRESENT;
}
这个方法是删除元素的方法。调用的是底层map的删除方法,底层map的remove方法的返回值和PRESENT是否相等作为这个方法的返回值。
public void clear() {
m.clear();
}
这个方法是将集合清空的方法,调用的是底层map的clear方法。