Module  java.base
软件包  java.util

Class TreeSet<E>

  • 参数类型
    E - 由此集合维护的元素的类型
    All Implemented Interfaces:
    SerializableCloneableIterable<E>Collection<E>NavigableSet<E>Set<E>SortedSet<E>


    public class TreeSet<E>
    extends AbstractSet<E>
    implements NavigableSet<E>, Cloneable, Serializable
    A NavigableSet实现基于TreeMap 的元件使用其有序natural ordering ,或由Comparator集合创建时提供,这取决于所使用的构造方法。

    此实现提供了基本的操作(保证的log(n)时间成本addremovecontains )。

    请注意,如果要正确实现Set接口,由集合维护的排序(无论是否提供显式比较器)必须与equals一致 (见ComparableComparator ,以获得与等于一致的精确定义)这是因为Set接口是根据equals操作定义的,但TreeSet实例使用其compareTo (或compare )方法执行所有元素比较,因此两通过该方法认为相等的元素从集合的角度来看是相等的。 集合的行为明确定义的,即使其排序与equals不一致; 它只是不符合Set接口的总体合同。

    请注意,此实现不同步。 如果多个线程并发访问树,并且至少有一个线程修改该集合,则必须在外部进行同步。 这通常通过在自然地封装集合的一些对象上进行同步来实现。 如果不存在这样的对象,则应使用Collections.synchronizedSortedSet方法“设置”。 这最好在创建时完成,以防止意外的非同步访问集:

      SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...)); 

    此类的iterator方法返回的迭代器是故障快速的 :如果集合在迭代器创建后的任何时间被修改,除了通过迭代器自己的remove方法之外,迭代器将抛出一个ConcurrentModificationException 因此,面对并发修改,迭代器将快速而干净地失败,而不是在未来未确定的时间冒着任意的非确定性行为。

    请注意,迭代器的故障快速行为无法保证,因为一般来说,在不同步并发修改的情况下,无法做出任何硬性保证。 失败快速的迭代器ConcurrentModificationExceptionConcurrentModificationException 因此,编写依赖于此异常的程序的正确性将是错误的: 迭代器的故障快速行为应仅用于检测错误。

    这个类是Java Collections Framework的成员。

    从以下版本开始:
    1.2
    另请参见:
    CollectionSetHashSetComparableComparatorTreeMapSerialized Form
    • 构造方法摘要

      构造方法  
      Constructor 描述
      TreeSet​()
      构造一个新的,空的树组,根据其元素的自然排序进行排序。
      TreeSet​(Collection<? extends E> c)
      构造一个包含指定集合中的元素的新树集,根据其元素的 自然排序进行排序
      TreeSet​(Comparator<? super E> comparator)
      构造一个新的,空的树集,根据指定的比较器进行排序。
      TreeSet​(SortedSet<E> s)
      构造一个包含相同元素的新树,并使用与指定排序集相同的顺序。
    • 构造方法详细信息

      • TreeSet

        public TreeSet​()
        构造一个新的,空的树组,根据其元素的自然排序进行排序。 插入到集合中的所有元素必须实现Comparable接口。 此外,所有这些元素必须相互可比较e1.compareTo(e2)不得为ClassCastException中的任何元素e1e2抛出ClassCastException 如果用户尝试向组中添加违反此约束的元素(例如,用户尝试将字符串元素添加到其元素为整数的集合),则add调用将抛出一个ClassCastException
      • TreeSet

        public TreeSet​(Comparator<? super E> comparator)
        构造一个新的,空的树集,根据指定的比较器进行排序。 插入到集合中的所有元素必须由指定的比较器相互比较: comparator.compare(e1, e2)不能为ClassCastException中的任何元素e1e2抛出ClassCastException 如果用户尝试向该集合中添加违反此约束的元素,那么add调用将抛出一个ClassCastException
        参数
        comparator - 将用于对该组进行排序的比较器。 如果是null ,将使用natural ordering的元素。
      • TreeSet

        public TreeSet​(Collection<? extends E> c)
        构造一个包含指定集合中的元素的新树集,根据其元素的自然排序进行排序 插入到集合中的所有元素必须实现Comparable接口。 此外,所有这些元素必须相互可比较e1.compareTo(e2)不得为ClassCastException中的任何元素e1e2抛出ClassCastException
        参数
        c - 其元素将组成新集合的集合
        异常
        ClassCastException - 如果c中的元素不是Comparable ,或者不相互比较
        NullPointerException - 如果指定的集合为空
      • TreeSet

        public TreeSet​(SortedSet<E> s)
        构造一个包含相同元素的新树,并使用与指定排序集相同的顺序。
        参数
        s - 其元素将组成新集的排序集
        异常
        NullPointerException - 如果指定的排序集为空
    • 方法详细信息

      • descendingIterator

        public Iterator<E> descendingIterator​()
        以降序返回该集合中的元素的迭代器。
        Specified by:
        descendingIterator在接口 NavigableSet<E>
        结果
        这个集合中的元素的迭代器按降序排列
        从以下版本开始:
        1.6
      • descendingSet

        public NavigableSet<E> descendingSet​()
        说明从接口NavigableSet复制
        返回此集合中包含的元素的反向排序视图。 下降集由此集合支持,因此对集合的更改反映在下降集中,反之亦然。 如果任何一个集合都被修改,而任一集合中的迭代正在进行(除了通过迭代器自己的remove操作),迭代的结果是未定义的。

        返回的集合的订单等同于Collections.reverseOrder (comparator()) 表达s.descendingSet().descendingSet()返回一个视图的s实质上等同于s

        Specified by:
        descendingSet在接口 NavigableSet<E>
        结果
        这个集合的逆序视图
        从以下版本开始:
        1.6
      • size

        public int size​()
        返回此集合中的元素数(其基数)。
        Specified by:
        size在接口 Collection<E>
        Specified by:
        size在接口 Set<E>
        Specified by:
        sizeAbstractCollection<E>
        结果
        该集合中的元素数(其基数)
      • contains

        public boolean contains​(Object o)
        如果此集合包含指定的元素,则返回true 更正式地,返回true当且仅当此集合包含一个元素e ,使Objects.equals(o, e)
        Specified by:
        contains在接口 Collection<E>
        Specified by:
        contains在接口 Set<E>
        重写:
        containsAbstractCollection<E>
        参数
        o - 要在此集合中检查包含的对象
        结果
        true如果此集合包含指定的元素
        异常
        ClassCastException - 如果指定的对象不能与当前集合中的元素进行比较
        NullPointerException - 如果指定的元素为空,并且该集合使用自然排序,或者其比较器不允许空元素
      • add

        public boolean add​(E e)
        将指定的元素添加到此集合(如果尚未存在)。 更正式地,将指定的元素e这一套如果集合不包含元素e2这样Objects.equals(e, e2) 如果此集合已经包含该元素,则该呼叫false该集合保持不变,并返回false
        Specified by:
        add在接口 Collection<E>
        Specified by:
        add在接口 Set<E>
        重写:
        addAbstractCollection<E>
        参数
        e - 要添加到此集合的元素
        结果
        true如果此集合尚未包含指定的元素
        异常
        ClassCastException - 如果指定的对象不能与当前在此集合中的元素进行比较
        NullPointerException - 如果指定的元素为空,并且该集合使用自然排序,或者其比较器不允许空元素
      • remove

        public boolean remove​(Object o)
        如果存在,则从该集合中删除指定的元素。 更正式地,删除一个元素e ,使Objects.equals(o, e) ,如果这个集合包含这样一个元素。 返回true如果此集合包含元素(或等效地,如果该集合由于调用而更改)。 (一旦调用返回,此集合将不包含该元素。)
        Specified by:
        remove在接口 Collection<E>
        Specified by:
        remove在接口 Set<E>
        重写:
        removeAbstractCollection<E>
        参数
        o - 要从此集合中删除的对象(如果存在)
        结果
        true如果这个集合包含指定的元素
        异常
        ClassCastException - 如果指定的对象无法与当前在此集合中的元素进行比较
        NullPointerException - 如果指定的元素为空,并且该集合使用自然排序,或者其比较器不允许空元素
      • subSet

        public NavigableSet<E> subSet​(E fromElement,
                                      boolean fromInclusive,
                                      E toElement,
                                      boolean toInclusive)
        描述从接口NavigableSet复制
        返回此集合的部分的视图,其元素的范围从fromElementtoElement 如果fromElementtoElement相等,则返回的集合为空,除非fromInclusivetoInclusive都为真。 返回的集合由此集合支持,因此返回集合中的更改将反映在此集合中,反之亦然。 返回的集合支持该集支持的所有可选集合操作。

        返回的集合将抛出一个IllegalArgumentException ,试图在其范围之外插入一个元素。

        Specified by:
        subSet在接口 NavigableSet<E>
        参数
        fromElement - 返回集合的低端点
        fromInclusive - true如果 true低端点包括在返回的视图中
        toElement - 返回集合的高端点
        toInclusive - true如果高端点要包含在返回的视图中
        结果
        该集合的部分视图的元素范围从 fromElement (含)到 toElement ,独占
        异常
        ClassCastException - 如果fromElementtoElement无法使用该集合的比较器彼此进行比较(或者如果该集合没有比较器,则使用自然排序)。 如果fromElementtoElement无法与当前集合中的元素进行比较,则实施可能但不是必须抛出此异常。
        NullPointerException - 如果 fromElementtoElement为空,并且此集合使用自然排序,或其比较器不允许空元素
        IllegalArgumentException - 如果fromElement大于toElement ; 或者如果此设置本身具有限制范围,并且fromElementtoElement位于范围的边界之外。
        从以下版本开始:
        1.6
      • headSet

        public NavigableSet<E> headSet​(E toElement,
                                       boolean inclusive)
        描述从接口NavigableSet复制
        返回此集合的部分的视图,其元素小于(或等于,如果inclusive为真) toElement 返回的集合由此集合支持,因此返回集合中的更改将反映在此集合中,反之亦然。 返回的集合支持该集支持的所有可选集合操作。

        返回的集合将抛出一个IllegalArgumentException ,尝试在其范围之外插入一个元素。

        Specified by:
        headSet在接口 NavigableSet<E>
        参数
        toElement - 返回集合的高端点
        inclusive - true如果高端点要包含在返回的视图中
        结果
        该集合的部分的元素的视图小于(或等于,如果 inclusive为真) toElement
        异常
        ClassCastException - 如果toElement与此设置的比较器不兼容(或者如果该集合没有比较器,如果toElement不实现Comparable )。 如果toElement无法与当前集合中的元素进行比较,则实施可能但不是必须抛出此异常。
        NullPointerException - 如果 toElement为空,并且该集合使用自然排序,或者其比较器不允许空元素
        IllegalArgumentException - 如果此设置本身具有限制范围,并且 toElement位于范围范围之外
        从以下版本开始:
        1.6
      • tailSet

        public NavigableSet<E> tailSet​(E fromElement,
                                       boolean inclusive)
        描述从接口NavigableSet复制
        返回此组的部分的视图,其元素大于(或等于,如果inclusive为true) fromElement 返回的集合由此集合支持,因此返回集合中的更改将反映在此集合中,反之亦然。 返回的集合支持该集支持的所有可选集合操作。

        返回的集合将抛出一个IllegalArgumentException ,试图在其范围之外插入一个元素。

        Specified by:
        tailSet在接口 NavigableSet<E>
        参数
        fromElement - 返回集合的低端点
        inclusive - true如果低端点要包含在返回的视图中
        结果
        该集合的部分的视图,其元素大于或等于 fromElement
        异常
        ClassCastException - 如果fromElement与此集合的比较器不兼容(或如果该集合没有比较器,如果fromElement不实现Comparable )。 如果fromElement无法与当前集合中的元素进行比较,则实施可能但不是必须抛出此异常。
        NullPointerException - 如果 fromElement为空,并且此集合使用自然排序,或其比较器不允许空元素
        IllegalArgumentException - 如果此设置本身具有限制范围,并且 fromElement位于范围的边界之外
        从以下版本开始:
        1.6
      • subSet

        public SortedSet<E> subSet​(E fromElement,
                                   E toElement)
        说明从接口NavigableSet复制
        返回此集合的部分的视图,其元素的范围从fromElement (包括)到toElement ,独占。 (如果fromElementtoElement相等,则返回的集合为空。)返回的集合由此集合支持,因此返回集合中的更改将反映在此集合中,反之亦然。 返回的集合支持该集支持的所有可选集合操作。

        返回的集合将会抛出一个IllegalArgumentException ,试图将一个元素插入其范围之外。

        相当于subSet(fromElement, true, toElement, false)

        Specified by:
        subSet在接口 NavigableSet<E>
        Specified by:
        subSet在接口 SortedSet<E>
        参数
        fromElement - 返回集合的低端点(含)
        toElement - 返回集合的高端点(独占)
        结果
        该集合的部分视图,其元素范围从 fromElement (含)到 toElement ,独占
        异常
        ClassCastException - 如果fromElementtoElement无法使用该集合的比较器彼此进行比较(或者如果该集合没有比较器,则使用自然排序)。 如果fromElementtoElement无法与当前集合中的元素进行比较,则实施可能但不是必须抛出此异常。
        NullPointerException - 如果 fromElementtoElement为空,并且此集合使用自然排序,或其比较器不允许空元素
        IllegalArgumentException - 如果fromElement大于toElement ; 或者如果此设置本身具有限制范围,并且fromElementtoElement位于范围范围之外
      • headSet

        public SortedSet<E> headSet​(E toElement)
        描述从接口NavigableSet复制
        返回此集合的部分的视图,其元素严格小于toElement 返回的集合由此集合支持,因此返回集合中的更改将反映在此集合中,反之亦然。 返回的集合支持该集支持的所有可选集合操作。

        返回的集合将抛出一个IllegalArgumentException ,试图在其范围之外插入一个元素。

        相当于headSet(toElement, false)

        Specified by:
        headSet在接口 NavigableSet<E>
        Specified by:
        headSet在接口 SortedSet<E>
        参数
        toElement - 返回集合的高端点(独占)
        结果
        该集合的部分的视图,其元素严格小于 toElement
        异常
        ClassCastException - 如果toElement与此集合的比较器不兼容(或者如果该集合没有比较器,如果toElement不实现Comparable )。 如果toElement无法与当前集合中的元素进行比较,则实施可能但不是必须抛出此异常。
        NullPointerException - 如果 toElement为空,并且此集合使用自然排序,或其比较器不允许空元素
        IllegalArgumentException - 如果此设置本身具有限制范围,并且 toElement位于范围的边界之外
      • tailSet

        public SortedSet<E> tailSet​(E fromElement)
        说明从接口NavigableSet复制
        返回该集合的元素大于或等于fromElement的部分的视图。 返回的集合由此集合支持,因此返回集合中的更改将反映在此集合中,反之亦然。 返回的集合支持该集支持的所有可选集合操作。

        返回的集合将抛出一个IllegalArgumentException ,试图在其范围之外插入一个元素。

        相当于tailSet(fromElement, true)

        Specified by:
        tailSet在接口 NavigableSet<E>
        Specified by:
        tailSet在接口 SortedSet<E>
        参数
        fromElement - 返回集合的低端点(含)
        结果
        该集合的部分的视图,其元素大于或等于 fromElement
        异常
        ClassCastException - 如果fromElement与此设置的比较器不兼容(或者如果该集合没有比较器,如果fromElement不实现Comparable )。 如果fromElement无法与当前集合中的元素进行比较,则实施可能但不是必须抛出此异常。
        NullPointerException - 如果 fromElement为空,并且此集合使用自然排序,或其比较器不允许空元素
        IllegalArgumentException - 如果此设置本身具有限制范围,并且 fromElement位于范围的边界之外
      • comparator

        public Comparator<? super E> comparator​()
        说明从界面SortedSet复制
        返回用于对该集合中的元素进行排序的比较器,或null如果此集合使用其元素的natural ordering
        Specified by:
        comparator在接口 SortedSet<E>
        结果
        比较器用于对该集合中的元素进行排序,如果此集合使用其元素的自然排序, null
      • first

        public E first​()
        描述从接口SortedSet复制
        返回此集合中当前的第一个(最低)元素。
        Specified by:
        first在接口 SortedSet<E>
        结果
        当前在这个集合中的第一(最低)元素
        异常
        NoSuchElementException - 如果此设置为空
      • last

        public E last​()
        说明从接口SortedSet复制
        返回此集合中当前的最后(最高)元素。
        Specified by:
        last在接口 SortedSet<E>
        结果
        当前在此集合中的最后(最高)元素
        异常
        NoSuchElementException - 如果此设置为空
      • lower

        public E lower​(E e)
        说明从界面NavigableSet复制
        返回这个集合中最大的元素,严格小于给定的元素,如果没有这样的元素,则 null
        Specified by:
        lower在接口 NavigableSet<E>
        参数
        e - 要匹配的值
        结果
        最大元素小于 e ,或 null如果没有这样的元素
        异常
        ClassCastException - 如果指定的元素不能与当前集合中的元素进行比较
        NullPointerException - 如果指定的元素为空,并且该集合使用自然排序,或者其比较器不允许空元素
        从以下版本开始:
        1.6
      • floor

        public E floor​(E e)
        说明从接口NavigableSet复制
        返回该集合中最大的元素小于或等于给定元素,如果没有这样的元素,则 null
        Specified by:
        floor在接口 NavigableSet<E>
        参数
        e - 要匹配的值
        结果
        最大元素小于或等于 e ,或 null如果没有这样的元素
        异常
        ClassCastException - 如果指定的元素不能与当前集合中的元素进行比较
        NullPointerException - 如果指定的元素为空,并且该集合使用自然排序,或者其比较器不允许空元素
        从以下版本开始:
        1.6
      • ceiling

        public E ceiling​(E e)
        说明从界面NavigableSet复制
        返回此集合中最小元素大于或等于给定元素,如果没有此元素,则 null
        Specified by:
        ceiling在接口 NavigableSet<E>
        参数
        e - 要匹配的值
        结果
        最小元素大于或等于 e ,或 null如果没有这样的元素
        异常
        ClassCastException - 如果指定的元素不能与当前集合中的元素进行比较
        NullPointerException - 如果指定的元素为空,并且该集合使用自然排序,或者其比较器不允许空元素
        从以下版本开始:
        1.6
      • higher

        public E higher​(E e)
        说明从界面NavigableSet复制
        返回此集中的最小元素严格大于给定元素,如果没有此元素,则 null
        Specified by:
        higher在接口 NavigableSet<E>
        参数
        e - 要匹配的值
        结果
        最小的元素大于 e ,如果没有这样的元素, null
        异常
        ClassCastException - 如果指定的元素不能与当前集合中的元素进行比较
        NullPointerException - 如果指定的元素为空,并且该集合使用自然排序,或者其比较器不允许空元素
        从以下版本开始:
        1.6
      • pollFirst

        public E pollFirst​()
        说明从界面NavigableSet复制
        检索并删除第一个(最低)元素,如果此集合为空,则返回 null
        Specified by:
        pollFirst在接口 NavigableSet<E>
        结果
        第一个元素,或 null如果此集合为空
        从以下版本开始:
        1.6
      • pollLast

        public E pollLast​()
        描述从接口NavigableSet复制
        检索并删除最后一个(最高)元素,如果此集合为空,则返回 null
        Specified by:
        pollLast在接口 NavigableSet<E>
        结果
        最后一个元素,或 null如果此集合为空
        从以下版本开始:
        1.6
      • clone

        public Object clone​()
        返回此TreeSet实例的浅拷贝。 (元素本身不被克隆。)
        重写:
        cloneObject
        结果
        这个集合的浅拷贝
        另请参见:
        Cloneable