java容器 接口SortedSet源码分析

目录

简介

comparator,subSet,headSet,tailSet

first,last,spliterator


简介

/**
 * 进一步提供其元素的总排序的集合。
 * 元素使用它们的自然顺序排序,或者使用通常在创建已排序集时提供的比较器进行排序。
 * 集合的迭代器将按升序元素顺序遍历集合。
 * 还提供了几个额外的操作来利用排序。(此接口是SortedMap的模拟set。)
 *
 * 

插入到排序集中的所有元素必须实现Comparable接口(或被指定的比较器接受)。 * 此外,所有这些元素都必须相互可比:e1.compareTo (e2)(或comparator.compare (e1, e2)) * 不应该抛出一个ClassCastException,对于任何元素e1和e2。 * 试图违反这一限制将导致出错的方法或构造函数调用抛出一个ClassCastException。 * *

请注意,如果要正确地实现set接口,那么由已排序集维护的顺序(无论是否提供显式比较器)必须与equals一致。 * (参见Comparable接口或Comparator接口,以获得与equals一致的精确定义。) * 这是因为Set接口是根据equals操作定义的,但是一个排序的集合使用它的compareTo(或compare)方法执行所有的元素比较, * 所以从排序的集合的角度来看,这个方法认为compare相等的两个元素是equals相等的。 * 排序集的行为是定义良好的,即使它的排序与equals不一致;只是没有遵守Set接口的一般约定。 * *

所有通用的排序集实现类都应该提供4个“标准”构造函数: * 1)一个void(无参数)构造函数,它创建一个根据其元素的自然顺序排序的空的排序集。 * 2)一个只有一个比较器类型参数的构造函数,它创建一个根据指定的比较器排序的空的排序集。 * 3)一个构造函数,该构造函数的参数类型为Collection,它创建一个新的已排序的集合,集合中的元素与它的参数相同,按元素的自然顺序排序。 * 4)一个只有一个SortedSet类型参数的构造函数,它用与输入排序集相同的元素和顺序创建一个新的排序集。 * *

注意:一些方法返回具有限定范围的子集。 * 这些范围是半开的,也就是说,它们包括它们的低端点,但不包括它们的高端点(如果适用的话)。 * 如果您需要一个封闭范围(包括两个端点),并且元素类型允许计算给定值的后继,那么只需请求子范围从lowEndpoint到后继(highEndpoint)。 * 例如,假设s是一组排序后的字符串。下面的习语获得了一个包含s中从低到高的所有字符串的视图,包括:

 *   SortedSet<String> sub = s.subSet(low, high+"\0");
* * 可以使用类似的技术生成一个开放范围(其中不包含端点)。 * 下面的习惯用法获得了一个包含s中从低到高的所有字符串的视图,排他的:
 *   SortedSet<String> sub = s.subSet(low+"\0", high);
* * @param the type of elements maintained by this set * * @author Josh Bloch * @see Set * @see TreeSet * @see SortedMap * @see Collection * @see Comparable * @see Comparator * @see ClassCastException * @since 1.2 */ public interface SortedSet extends Set

java容器 接口SortedSet源码分析_第1张图片

comparator,subSet,headSet,tailSet

    /**
     * 返回用于对该集合中的元素排序的比较器,如果该集合使用其元素的自然顺序,则返回null。
     *
     * @return the comparator used to order the elements in this set,
     *         or null if this set uses the natural ordering
     *         of its elements
     */
    Comparator comparator();

    /**
     * 返回该集合中元素范围从fromElement(包括)到toElement(不包括)的部分的视图。
     * (如果fromElement和toElement相等,则返回的集合为空。)
     * 返回的集合由这个集合支持,所以返回的集合中的变化反映在这个集合中,反之亦然。
     * 返回的集合支持此集合支持的所有可选集合操作。
     *
     * 

返回的集合将在试图插入超出其范围的元素时抛出IllegalArgumentException。 * * * @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 * fromElement, inclusive, to toElement, exclusive * @throws ClassCastException if fromElement and * toElement 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 fromElement or * toElement cannot be compared to elements currently in * the set. * @throws NullPointerException if fromElement or * toElement is null and this set does not permit null * elements * @throws IllegalArgumentException if fromElement is * greater than toElement; or if this set itself * has a restricted range, and fromElement or * toElement lies outside the bounds of the range */ SortedSet subSet(E fromElement, E toElement); /** * 返回该集合中元素严格小于toElement部分的视图。 * 返回的集合由这个集合支持,所以返回的集合中的变化反映在这个集合中,反之亦然。 * 返回的集合支持此集合支持的所有可选集合操作。 * *

返回的集合将在试图插入超出其范围的元素时抛出IllegalArgumentException。 * * @param toElement high endpoint (exclusive) of the returned set * @return a view of the portion of this set whose elements are strictly * less than toElement * @throws ClassCastException if toElement is not compatible * with this set's comparator (or, if the set has no comparator, * if toElement does not implement {@link Comparable}). * Implementations may, but are not required to, throw this * exception if toElement cannot be compared to elements * currently in the set. * @throws NullPointerException if toElement is null and * this set does not permit null elements * @throws IllegalArgumentException if this set itself has a * restricted range, and toElement lies outside the * bounds of the range */ SortedSet headSet(E toElement); /** * 返回该集合中元素大于或等于fromElement的部分的视图。 * 返回的集合由这个集合支持,所以返回的集合中的变化反映在这个集合中,反之亦然。 * 返回的集合支持此集合支持的所有可选集合操作。 * *

返回的集合将在试图插入超出其范围的元素时抛出IllegalArgumentException。 * * @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 fromElement * @throws ClassCastException if fromElement is not compatible * with this set's comparator (or, if the set has no comparator, * if fromElement does not implement {@link Comparable}). * Implementations may, but are not required to, throw this * exception if fromElement cannot be compared to elements * currently in the set. * @throws NullPointerException if fromElement is null * and this set does not permit null elements * @throws IllegalArgumentException if this set itself has a * restricted range, and fromElement lies outside the * bounds of the range */ SortedSet tailSet(E fromElement);

first,last,spliterator

    /**
     * 返回当前集合中的第一个(最低的)元素。
     *
     * @return the first (lowest) element currently in this set
     * @throws NoSuchElementException if this set is empty
     */
    E first();

    /**
     * 返回当前集合中最后一个(最高的)元素。
     *
     * @return the last (highest) element currently in this set
     * @throws NoSuchElementException if this set is empty
     */
    E last();

    /**
     * 在这个排序集的元素上创建一个Spliterator。
     *
     * 

Spliterator报告DISTINCT,SORTED,ORDERED。实现应该记录其他特征值的报告。 * *

如果排序集的比较器(参见comparator())为空,那么spliterator的比较器 * (参见java.util.Spliterator.getComparator())必须为空。 * 否则,spliterator的比较器必须与已排序集的比较器相同,或者施加相同的总排序。 * * *

The default implementation creates a * late-binding spliterator * from the sorted set's {@code Iterator}. The spliterator inherits the * fail-fast properties of the set's iterator. The * spliterator's comparator is the same as the sorted set's comparator. * * 默认实现从排序集的迭代器创建一个后期绑定spliterator。 * spliterator继承了set的迭代器的快速失效属性。spliterator的比较器与排序集的比较器是相同的。 *

* The created {@code Spliterator} additionally reports * {@link Spliterator#SIZED}. * * * The created {@code Spliterator} additionally reports * {@link Spliterator#SUBSIZED}. * * @return a {@code Spliterator} over the elements in this sorted set * @since 1.8 */ @Override default Spliterator spliterator() { return new Spliterators.IteratorSpliterator( this, Spliterator.DISTINCT | Spliterator.SORTED | Spliterator.ORDERED) { @Override public Comparator getComparator() { return SortedSet.this.comparator(); } }; }

你可能感兴趣的:(源码分析,java容器)