Sorted & Navigable
Collection 系列文章的总目录:
- Collection 体系的三个核心约定
- Sorted & Navigable
- Iterator & Iterable
- Java 中的数组
- ArrayList
- LinkedList
- HashMap
- LinkedHashMap
- TreeMap
- HashSet/LinkedHashSet/TreeSet
SortedSet/SortedMap
Map 的 key 就是一个 Set,所以 Java 中几乎所有的 Set 都是使用对应的 Map 实现的。
TreeSet -> NavigableSet -> SortedSet
所以 TreeSet 是 SortedSet 的一个实现。(另一个是 ConcurrentSkipListSet)
public interface SortedSet<E> extends Set<E> {
// 返回使用的comparator,如果使用自然排序(compareTo),则返回null
Comparator<? super E> comparator();
// 返回该set中元素范围从fromElement(包括)到toElement(不包括)的部分的视图。
// 任何对返回的set的操作都会改变原来的set,反之亦然
// 如果fromElement和toElement相等,则返回一个空的set
SortedSet<E> subSet(E fromElement, E toElement);
// 返回小于toElement的部分的视图
SortedSet<E> headSet(E toElement);
// 返回大于或等于fromElement的那部分的视图。
SortedSet<E> tailSet(E fromElement);
// 返回第一个(最小的)元素。
E first();
// 返回最后一个(最大的)元素。
E last();
default Spliterator<E> spliterator(){}
}
注意:SortedSet 内部只用 compareTo/comparator 进行比较排序,所以对于传入的 element,也是使用 compareTo/comparator 来进行范围查找,即可以传一个不本身不在 set 内部的 element,只需要可以使用 compareTo/comparator 即可。
NavigableSet/NavigableMap
public interface NavigableSet<E> extends SortedSet<E> {
// 返回小于e的最大元素,如果没有,则返回null。
E lower(E e);
// 返回小于或等于e的最大元素,如果没有,则返回null。
E floor(E e);
// 返回大于或等于e的最小元素,如果没有,则返回null。
E ceiling(E e);
// 返回大于e的最小元素,如果没有,则返回null。
E higher(E e);
// 检索并删除第一个(最小的)元素,如果set为空,则返回null。
E pollFirst();
// 检索并删除最后一个(最大的)元素,如果set为空,则返回null。
E pollLast();
Iterator<E> iterator();
// 返回降序的set的视图
NavigableSet<E> descendingSet();
Iterator<E> descendingIterator();
NavigableSet<E> subSet(E fromElement, boolean fromInclusive,
E toElement, boolean toInclusive);
NavigableSet<E> headSet(E toElement, boolean inclusive);
NavigableSet<E> tailSet(E fromElement, boolean inclusive);
SortedSet<E> subSet(E fromElement, E toElement);
SortedSet<E> headSet(E toElement);
SortedSet<E> tailSet(E fromElement);
}
注意:NavigableSet 内部也是只用 compareTo/comparator 进行比较排序。
可以看到,NavigableSet 继承了 SortedSet,增加了单个元素的范围查找、降序set,以及增强的获取的部分set方法。