本文章帮助大家对SortedSet
接口的理解。
SortedSet
意为有序集合(无特殊说明,本文章“集合”指SortedSet
)。顾名思义,就是同一类对象(元素)的有序集合体。它继承于Set
接口,其元素是有顺序的,使用其迭代器进行升序遍历。需要使用有顺序的集合,建议实现此接口。参考Set
接口。
package java.util;
import java.util.SortedSet;
使用SortedSet
接口时,需引入此包。
public interface SortedSet<E> extends Set<E> { /*...*/ }
使用接口时传入泛型E
,为集合元素的类型。继承了Set
接口,使集合具有Set
集合的表现。
注意:要求其实现类遵守如此规定:需实现四个构造函数:一个无参数构造函数,以创建一个空集合(按自然序排序);一个参数为Comparator
类型的构造函数,以创建一个按Comparator
排序的空集合;一个参数为Collection
类型的构造函数,以创建一个具有和参数相同元素的集合(按自然序排序);一个参数为SortedSet
类型的构造函数,以创建一个具有和参数相同元素、相同顺序的集合。但由于接口不能包含构造函数,所以无法强制执行此规定。参考Comparator
接口、Collection
接口。
Comparator<? super E> comparator();
返回排序所用比较器。若排序使用元素自然序,返回空。
SortedSet<E> subSet(E fromElement, E toElement);
返回集合的一部分的视图(也为有序集合),其从元素fromElement
开始(包含)到toElement
结束(不包含)。若fromElement
等于toElement
,则返回集合为空。若对返回集合插入参数范围外的元素,将抛出IllegalArgumentException
异常。
重点:返回集合受此集合支撑,对返回集合的修改也会反映到此集合上,反之亦然。此集合所有可选的操作,对于返回集合都是支持的。
若参数元素不能和集合元素比较,可抛出ClassCastException
异常;若有参数为空而集合不允许有空值,则抛出NullPointerException
异常;若fromElement
大于toElement
,或集合本身有范围限制但有参数在范围外,则抛出IllegalArgumentException
异常。
SortedSet<E> headSet(E toElement);
返回集合的一部分的视图(也为有序集合),其从第一个元素开始(包含)到toElement
结束(不包含)。若对返回集合插入参数范围外的元素,将抛出IllegalArgumentException
异常。
重点:返回集合受此集合支撑,对返回集合的修改也会反映到此集合上,反之亦然。此集合所有可选的操作,对于返回集合都是支持的。
若参数元素不能和集合元素比较,可抛出ClassCastException
异常;若参数为空而集合不允许有空值,则抛出NullPointerException
异常;若集合本身有范围限制但参数在范围外,则抛出IllegalArgumentException
异常。
SortedSet<E> tailSet(E fromElement);
返回集合的一部分的视图(也为有序集合),其从元素fromElement
开始(包含)到最后一个元素结束(包含)。若对返回集合插入参数范围外的元素,将抛出IllegalArgumentException
异常。
重点:返回集合受此集合支撑,对返回集合的修改也会反映到此集合上,反之亦然。此集合所有可选的操作,对于返回集合都是支持的。
若参数元素不能和集合元素比较,可抛出ClassCastException
异常;若参数为空而集合不允许有空值,则抛出NullPointerException
异常;若集合本身有范围限制但参数在范围外,则抛出IllegalArgumentException
异常。
E first();
返回集合的最小值(第一个元素)。若集合为空,则抛出NoSuchElementException
异常。
E last();
返回集合的最大值(最后一个元素)。若集合为空,则抛出NoSuchElementException
异常。
default Spliterator<E> spliterator() {
return new Spliterators.IteratorSpliterator<E>(
this, Spliterator.DISTINCT | Spliterator.SORTED | Spliterator.ORDERED) {
@Override
public Comparator<? super E> getComparator() {
return SortedSet.this.comparator();
}
};
}
重写Set
接口的Spliterator
方法,参考Set.spliterator
方法。
返回覆盖此集合元素的分割迭代器,可用来遍历、分割序列。参考Spliterators.IteratorSpliterator
类。default
关键字给出默认实现。
新人源码理解,望大家多多指点。