SortedSet接口源码理解

文章目录

  • 前言
  • 一、概述
  • 二、源码理解
    • 方法
      • comparator
      • subSet
      • headSet
      • tailSet
      • first
      • last
      • spliterator
  • 总结


前言

本文章帮助大家对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

Comparator<? super E> comparator();

返回排序所用比较器。若排序使用元素自然序,返回空。

subSet

SortedSet<E> subSet(E fromElement, E toElement);

返回集合的一部分的视图(也为有序集合),其从元素fromElement开始(包含)到toElement结束(不包含)。若fromElement等于toElement,则返回集合为空。若对返回集合插入参数范围外的元素,将抛出IllegalArgumentException异常。

重点:返回集合受此集合支撑,对返回集合的修改也会反映到此集合上,反之亦然。此集合所有可选的操作,对于返回集合都是支持的。

若参数元素不能和集合元素比较,可抛出ClassCastException异常;若有参数为空而集合不允许有空值,则抛出NullPointerException异常;若fromElement大于toElement,或集合本身有范围限制但有参数在范围外,则抛出IllegalArgumentException异常。

headSet

SortedSet<E> headSet(E toElement);

返回集合的一部分的视图(也为有序集合),其从第一个元素开始(包含)到toElement结束(不包含)。若对返回集合插入参数范围外的元素,将抛出IllegalArgumentException异常。

重点:返回集合受此集合支撑,对返回集合的修改也会反映到此集合上,反之亦然。此集合所有可选的操作,对于返回集合都是支持的。

若参数元素不能和集合元素比较,可抛出ClassCastException异常;若参数为空而集合不允许有空值,则抛出NullPointerException异常;若集合本身有范围限制但参数在范围外,则抛出IllegalArgumentException异常。

tailSet

SortedSet<E> tailSet(E fromElement);

返回集合的一部分的视图(也为有序集合),其从元素fromElement开始(包含)到最后一个元素结束(包含)。若对返回集合插入参数范围外的元素,将抛出IllegalArgumentException异常。

重点:返回集合受此集合支撑,对返回集合的修改也会反映到此集合上,反之亦然。此集合所有可选的操作,对于返回集合都是支持的。

若参数元素不能和集合元素比较,可抛出ClassCastException异常;若参数为空而集合不允许有空值,则抛出NullPointerException异常;若集合本身有范围限制但参数在范围外,则抛出IllegalArgumentException异常。

first

E first();

返回集合的最小值(第一个元素)。若集合为空,则抛出NoSuchElementException异常。

last

E last();

返回集合的最大值(最后一个元素)。若集合为空,则抛出NoSuchElementException异常。

spliterator

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 spliterator()方法,参考Set.spliterator方法。

返回覆盖此集合元素的分割迭代器,可用来遍历、分割序列。参考Spliterators.IteratorSpliterator类。default关键字给出默认实现。


总结

新人源码理解,望大家多多指点。

你可能感兴趣的:(java,#,jdk14,#,jdk18,java)