1.类图

public class TreeSet<E> extends AbstractSet<E>implements NavigableSet<E>, Cloneable, java.io.Serializable {}
TreeSet继承了抽象类AbstractSet,实现了NavigableSet、Cloneable、Serializable接口
- NavigableSet:导航方法,treeMap实现的接口
- Cloneable:可以克隆
- Serializable:可以被序列化
与HashSet类似,TreeSet底层是通过TreeMap实现的。底层是红黑树,加入了排序功能,升序遍历。
2.成员变量
//存放元素的集合private transient NavigableMap<E,Object> m;//PRESENT就是上面NavigableMap中的Object,类似于hashSet的作用private static final Object PRESENT = new Object();
3. 构造方法
public TreeSet() {this(new TreeMap<E,Object>());}public TreeSet(Comparator<? super E> comparator) {this(new TreeMap<>(comparator));}public TreeSet(Collection<? extends E> c) {this();addAll(c);}public TreeSet(SortedSet<E> s) {this(s.comparator());addAll(s);}TreeSet(NavigableMap<E,Object> m) {// 通过多态的形式生成了一个TreeMap并赋值给了m。// NavigableMap<E,Object> m = new TreeMap<E,Object>()this.m = m;}
底层就是new一个TreeMap来实现的,我们还可以定义自己的比较器和排序器。
4.方法
4.1 继承于AbstractCollection的方法

类似于hashSet,增删改的方法全部来自于AbstractCollection,底层实现调用了treeMap的方法。
public boolean add(E e) {return m.put(e, PRESENT)==null;}public boolean contains(Object o) {return m.containsKey(o);}public boolean remove(Object o) {return m.remove(o)==PRESENT;}public void clear() {m.clear();}public int size() {return m.size();}public boolean isEmpty() {return m.isEmpty();}public Iterator<E> iterator() {return m.navigableKeySet().iterator();}
4.2 实现NavigableSet的方法
这所有的方法底层基本上也都调用了treeMap的方法
返回子set
//底层其实就是通过TreeMap的subMap()实现的public NavigableSet<E> subSet(E fromElement, boolean fromInclusive,E toElement, boolean toInclusive) {return new TreeSet<>(m.subMap(fromElement, fromInclusive,toElement, toInclusive));}
返回set的头部与尾部
// 返回Set的头部,范围是:从头部到toElement。// inclusive:是否包含toElement的标志public NavigableSet<E> headSet(E toElement, boolean inclusive) {return new TreeSet<E>(m.headMap(toElement, inclusive));}// 返回Set的尾部,范围是:从fromElement到结尾。public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {return new TreeSet<E>(m.tailMap(fromElement, inclusive));}
返回特定元素
// 返回Set的第一个元素public E first() { return m.firstKey(); }// 返回Set的最后一个元素public E last() { return m.lastKey(); }// 返回Set中小于e的最大元素public E lower(E e) { return m.lowerKey(e); }// 返回Set中小于/等于e的最大元素public E floor(E e) { return m.floorKey(e);}// 返回Set中大于/等于e的最小元素public E ceiling(E e) { return m.ceilingKey(e);}// 返回Set中大于e的最小元素public E higher(E e) { return m.higherKey(e);}
返回特定元素并移除
// 获取第一个元素,并将该元素从TreeMap中删除。public E pollFirst() {Map.Entry<E,?> e = m.pollFirstEntry();return (e == null)? null : e.getKey();}// 获取最后一个元素,并将该元素从TreeMap中删除。public E pollLast() {Map.Entry<E,?> e = m.pollLastEntry();return (e == null)? null : e.getKey();}
