前言
前面我们已经分析了HashSet这一个分支,今天我们来分析SortedSet这个分支。
正文
前面的HashSet实现是无序的,而这条线上的SortedSet,顾名思义,是有序的set集合。
java.util
Interface SortedSet<E>
参数类型
E - 由此集合维护的元素的类型
All Superinterfaces:
Collection <E>, Iterable <E>, Set <E>
All Known Subinterfaces:
NavigableSet <E>
所有已知实现类:
ConcurrentSkipListSet , TreeSet
SortedSet是继承了Set集合的一个接口,主要是为后续实现类建立了一个标准。
标准
**1、所有通用排序集实现类应提供四个“标准”构造函数:
- 1)一个无参的空构造函数,创建一个依赖于元素自身的自然排序的空排序集合。
- 2)包含一个Comparator类型参数的构造器,由指定的Comparator方法来规定排序规则。
- 3)包含一个指定的Collection集合的构造器,创建一个包含了指定集合中的元素,依赖元素自然
- 排序的排序集合
- 4)创建一个包含指定的SortedSet集合的构造器,排序规则与指定的SortedSet一致。**
2、排序集合中的元素必须实现Comparable接口,或者能够被指定的Comparator比较器接受。
3、元素都是按递增顺序排序的。
源码解析
子集操作
/**
* 返回一个范围在fromElement到toElement之间(含fromElement,不含toElement)的SortedSet集合。
* (如果fromElement和toElement相等,则返回空集合)
* 返回的set依赖于当前set,如果返回的set发生的改变也会反应到当前set上,反之亦然。
* 返回的set集合支持当前集合的所有可选集合操作。
* Returns a view of the portion of this set whose elements range
* from <tt>fromElement</tt>, inclusive, to <tt>toElement</tt>,
* exclusive. (If <tt>fromElement</tt> and <tt>toElement</tt> are
* equal, the returned set is empty.) The returned set is backed
* by this set, so changes in the returned set are reflected in
* this set, and vice-versa. The returned set supports all
* optional set operations that this set supports.
*
* 尝试在返回的集合之外插入元素会抛出一个IllegalArgumentException异常。
* <p>The returned set will throw an <tt>IllegalArgumentException</tt>
* on an attempt to insert an element outside its range.
*
* @param fromElement low endpoint (inclusive) of the returned set
* @param toElement high endpoint (exclusive) of the returned set
* @return a view of the portion of this set whose elements range from
* <tt>fromElement</tt>, inclusive, to <tt>toElement</tt>, exclusive
* @throws ClassCastException if <tt>fromElement</tt> and
* <tt>toElement</tt> cannot be compared to one another using this
* set's comparator (or, if the set has no comparator, using
* natural ordering). Implementations may, but are not required
* to, throw this exception if <tt>fromElement</tt> or
* <tt>toElement</tt> cannot be compared to elements currently in
* the set.
* @throws NullPointerException if <tt>fromElement</tt> or
* <tt>toElement</tt> is null and this set does not permit null
* elements
* @throws IllegalArgumentException if <tt>fromElement</tt> is
* greater than <tt>toElement</tt>; or if this set itself
* has a restricted range, and <tt>fromElement</tt> or
* <tt>toElement</tt> lies outside the bounds of the range
*/
SortedSet<E> subSet(E fromElement, E toElement);
/**
* 这是SubSet方法的一个变种,省去了fromElement参数,直接默认从头开始。
* Returns a view of the portion of this set whose elements are
* strictly less than <tt>toElement</tt>. The returned set is
* backed by this set, so changes in the returned set are
* reflected in this set, and vice-versa. The returned set
* supports all optional set operations that this set supports.
*
* <p>The returned set will throw an <tt>IllegalArgumentException</tt>
* on an attempt to insert an element outside its range.
*
* @param toElement high endpoint (exclusive) of the returned set
* @return a view of the portion of this set whose elements are strictly
* less than <tt>toElement</tt>
* @throws ClassCastException if <tt>toElement</tt> is not compatible
* with this set's comparator (or, if the set has no comparator,
* if <tt>toElement</tt> does not implement {@link Comparable}).
* Implementations may, but are not required to, throw this
* exception if <tt>toElement</tt> cannot be compared to elements
* currently in the set.
* @throws NullPointerException if <tt>toElement</tt> is null and
* this set does not permit null elements
* @throws IllegalArgumentException if this set itself has a
* restricted range, and <tt>toElement</tt> lies outside the
* bounds of the range
*/
SortedSet<E> headSet(E toElement);
/**
* 这是SubSet方法的一个变种,省去了toElement参数,直接到set末尾。
* Returns a view of the portion of this set whose elements are
* greater than or equal to <tt>fromElement</tt>. The returned
* set is backed by this set, so changes in the returned set are
* reflected in this set, and vice-versa. The returned set
* supports all optional set operations that this set supports.
*
* <p>The returned set will throw an <tt>IllegalArgumentException</tt>
* on an attempt to insert an element outside its range.
*
* @param fromElement low endpoint (inclusive) of the returned set
* @return a view of the portion of this set whose elements are greater
* than or equal to <tt>fromElement</tt>
* @throws ClassCastException if <tt>fromElement</tt> is not compatible
* with this set's comparator (or, if the set has no comparator,
* if <tt>fromElement</tt> does not implement {@link Comparable}).
* Implementations may, but are not required to, throw this
* exception if <tt>fromElement</tt> cannot be compared to elements
* currently in the set.
* @throws NullPointerException if <tt>fromElement</tt> is null
* and this set does not permit null elements
* @throws IllegalArgumentException if this set itself has a
* restricted range, and <tt>fromElement</tt> lies outside the
* bounds of the range
*/
SortedSet<E> tailSet(E fromElement);
元素操作
/**
* 返回当前set中的第一个(最低位)元素
* Returns the first (lowest) element currently in this set.
*
* @return the first (lowest) element currently in this set
* @throws NoSuchElementException if this set is empty
*/
E first();
/**
* 返回当前set的最后一个(最高位)元素
* Returns the last (highest) element currently in this set.
*
* @return the last (highest) element currently in this set
* @throws NoSuchElementException if this set is empty
*/
E last();
比较器
/**
* 返回一个用于比较元素的比较器,如果该set集合使用元素的自然排序规则,则返回null。
* Returns the comparator used to order the elements in this set,
* or <tt>null</tt> if this set uses the {@linkplain Comparable
* natural ordering} of its elements.
*
* @return the comparator used to order the elements in this set,
* or <tt>null</tt> if this set uses the natural ordering
* of its elements
*/
Comparator<? super E> comparator();