一、概述
是一个不含重复元素,有序的集合类。作用为提供有序的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<E,Object> m;
TreeSet(NavigableMap<E,Object> m) {
this.m = m;
}
四、实现要点
1.构造方法
基于NavigationMap生成
TreeSet(NavigableMap<E,Object> m) {
this.m = m;
}
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);
}
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<E> iterator() {
return m.navigableKeySet().iterator();
}
public Iterator<E> descendingIterator() {
return m.descendingKeySet().iterator();
}
4.导航方法
分为两类介绍,返回单个元素和返回元素集合:
返回单个元素,直接调用NavigationMap的对应方法
public E first() {
return m.firstKey();
}
返回元素集合,返回NavigationMap中对应的集合(NavigationMap),并转化为NavigationSet,引用未变
public NavigableSet<E> headSet(E toElement, boolean inclusive) {
return new TreeSet<>(m.headMap(toElement, inclusive));
}