SortedSet接口源码理解

35 篇文章 0 订阅
34 篇文章 0 订阅


前言

本文章帮助大家对SortedSet接口的理解。


一、概述

SortedSet意为有序集合(无特殊说明,本文章“集合”指SortedSet)。顾名思义,就是同一类对象(元素)的有序集合体。它继承于Set接口,其元素是有顺序的,使用其迭代器进行升序遍历。需要使用有顺序的集合,建议实现此接口。参考Set接口。

二、源码理解

package java.util;
import java.util.SortedSet;

使用SortedSet接口时,需引入此包。

SortedSet接口

public interface SortedSet<E> extends Set<E> { /*...*/ }

使用接口时传入泛型E,为集合元素的类型。继承了Set接口,使集合具有Set集合的表现。

注意:要求其实现类遵守如此规定:需实现四个构造函数:一个无参数构造函数,以创建一个空集合(按自然序排序);一个参数为Comparator类型的构造函数,以创建一个按Comparator排序的空集合;一个参数为Collection类型的构造函数,以创建一个具有和参数相同元素的集合(按自然序排序);一个参数为SortedSet类型的构造函数,以创建一个具有和参数相同元素、相同顺序的集合。但由于接口不能包含构造函数,所以无法强制执行此规定。参考Comparator接口、Collection接口。

SortedSet方法

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

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


总结

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值