第1部分 SortedSet接口介绍
SortedSet接口简介
SortedSet接口实现了Set接口,因此具有Set, Collection,Iterable接口的所有方法属性。
SortedSet接口使用指定的比较器来排序,同时提供获取首尾元素,指定范围集合的方法。
SortedSet接口常用API
修饰语和返回类型 | 方法 | 描述 |
---|---|---|
Comparator<? super E> | comparator() | 获取比较器 |
SortedSet | subSet(E fromElement, E toElement) | 返回值范围为[fromElement,toElement)范围的子集 |
SortedSet | headSet(E toElement) | 返回值小于的toElement子集 |
SortedSet | tailSet(E fromElement) | 返回值大于或等于fromElement的子集 |
E | first() | 获取当前集合的首元素 |
E | last() | 获取当前集合的尾元素 |
default Spliterator<E> | spliterator() | 获取可分割迭代器 |
根据这些API可知,只需要记住SortedSet获取范围是左闭右开即可。
第2部分 SortedSet接口数据结构
SortedSet接口的继承关系
java.lang.Object
↳ java.lang.Iterable<E>
↳ java.util.Collection<E>
↳ java.util.Set<E>
↳
public interface SortedSet<E> extends Set<E> {}
SortedSet接口的关系图
图1 SortedSet接口的关系图
第3部分 SortedSet接口源码解析(基于JDK-8u201)
以下方法的含义在前面已经说明,下面主要分析重写的方法。
public interface SortedSet<E> extends Set<E> {
Comparator<? super E> comparator();
SortedSet<E> subSet(E fromElement, E toElement);
SortedSet<E> headSet(E toElement);
SortedSet<E> tailSet(E fromElement);
E first();
E last();
@Override
default Spliterator<E> spliterator() {
//设置特征码为DISTINCT|SORTED|ORDERED,表明每个元素都是不同,并且是有序的
return new Spliterators.IteratorSpliterator<E>(
this, Spliterator.DISTINCT | Spliterator.SORTED | Spliterator.ORDERED) {
//指定比较器为SortedSet实例对象的比较器
@Override
public Comparator<? super E> getComparator() {
return SortedSet.this.comparator();
}
};
}
}
以上代码比较简单,使用了模板方法的涉及模式,让子类来指定比较器。然而有一个需要注意的地方,就是SortedSet.this,这是一种比较有意思的方式,用来获取具体实例对象。