Java集合·13·TreeSet详解

一、概述
是一个不含重复元素,有序的集合类。作用为提供有序的Set集合。
继承自AbstractSet,实现了NavigableSet、Cloneable、Serializable接口。
SortedSet Sorted相关方法,分为三类:
一类是获取元素项的方法,包括first()、last()
一类是获取元素集合的方法,包括subSet()、headSet()、tailSet()
一类是获取Comparator的方法,包括comparator()
NavigdationSet 导航相关方法,可以分为三类:
一类是提供元素项的导航方法,返回某个元素。包括lower()、floor()、ceiling()、higher()。ower、floor、ceiling 和 higher 分别返回小于、小于等于、大于等于、大于给定元素的元素,如果不存在这样的元素,则返回 null。
一类是提供元素集合的导航方法,返回元素集合。包括subSet()、headSet()、tailSet()、descendingSet()
一类是Iterator,返回Iterator。包括iterator()、descendingIterator()
二、特点

  • 不含重复元素
  • 不容许null值
  • 有序,支持Comparator比较器
三、数据结构
使用NavigationMap(TreeMap)作为存储
private transient NavigableMap m; TreeSet(NavigableMap m) { this.m = m; }

四、实现要点
1.构造方法 基于NavigationMap生成
TreeSet(NavigableMap m) { this.m = m; }public TreeSet() { this(new TreeMap()); } public TreeSet(Comparator comparator) { this(new TreeMap<>(comparator)); } public TreeSet(Collection c) { this(); addAll(c); } public TreeSet(SortedSet s) { this(s.comparator()); addAll(s); }

2. 基本方法 添加,PRESENT为傀儡数据(Dummy value)
public boolean add(E e) { return m.put(e, PRESENT)==null; }

删除
public boolean remove(Object o) { return m.remove(o)==PRESENT; }

3. 访问方法 仅支持一种访问方法:Iterator
Iterator
Iterator可以分为顺序iterator和逆序descendingIterator,使用NavigationMap的keySet的Iterator/descendingKeySet的Iterator
public Iterator iterator() { return m.navigableKeySet().iterator(); }

public Iterator descendingIterator() { return m.descendingKeySet().iterator(); }

4.导航方法 分为两类介绍,返回单个元素和返回元素集合:
返回单个元素,直接调用NavigationMap的对应方法
public E first() { return m.firstKey(); }

【Java集合·13·TreeSet详解】返回元素集合,返回NavigationMap中对应的集合(NavigationMap),并转化为NavigationSet,引用未变
public NavigableSet headSet(E toElement, boolean inclusive) { return new TreeSet<>(m.headMap(toElement, inclusive)); }

    推荐阅读