类介绍
类定位
SortedSet
,直接翻译过来就是有序集合。所以集合Set
是和List
一样有顺序的。。。。。。。。。(卧槽,看到这里才反应过来),尴尬。
它在Set
的基础上新加了一些方法,和顺序有关的。
类继承关系分析
直接上截图:

SortedSet
这个接口从最上边一条线继承下来的,一目了然。我们不如温习一下各个层都有什么用:
-
Iterable
提出了遍历和删除的相关操作 -
Collection
在Iterable
的基础上增加了求数量、添加、转化数组、判断存在等操作,并丰富了遍历、删除操作。 -
Set
在Collection
的基础上没有新加方法,只是定义出一层。 -
SortedSet
在Set
的基础上增加了比较和排序的功能,并增加了与之相关的一些方法。
类使用场景
有序存储时。
说实话,我基本没用过。用到时再说吧。
类注意事项
- 构造方法:
SortedSet
建议提供四个构造方法,当然,你不提供我们也没办法,毕竟interface
不能对constructor
方法进行限制。。。多提供也行,看心情喽- 传入空,以自然顺序创造一个空集合
- 传入
Collection
,以此Collection
、自然顺序为依据构造SortedSet
- 传入
Comparator
,以此Comparator
规定的顺序创造一个空集合 - 传入
SortedSet
,以传入的SortedSet
规定的顺序、传入的SortedSet
中的元素集为集合创造一个SortedSet
【这个是不是有点像emmmmm,装饰器模式,当然这是构造型不是结构型,而且本意不是增加功能】
- 涉及比较,又是老生常谈的
compare()
,compareTo()
的结果必须和equals()
一致。但是,SortedSet
涉及对象的比较,只用了compare()
/compareTo()
。。。。。你可以作,这里可以完美运作** - 默认获得某一段下标范围的元素,都是半开的,即包括开头元素,不包括结尾元素,当然,你可以定制,传入的某些参数值改改变成左开/全闭/全开。看你怎么实现了。
类源码介绍
源码解析
Comparator<? super E> comparator();
返回本SortedSet
中的比较类(如果在构造函数专门初始化了的话)
SortedSet<E> subSet(E fromElement, E toElement);
获得此集合的一个子类,值介于两个入参之间,如果元素集合中存在和两个入参相等的边缘,那么结果包括fromElement
,不包括toElement
。
注意:
- 如果两个入参相等,那么返回结果为空集合。【注意,这里我为什么不写
(fromElement==toElement) =true
?】【SortedSet
不用这些东西,只用Comparator
/Comparatable
】- 传入的参数必须为可比较的,情况有二:
- 如果此
SortedSet
是通过Comparator
比较的,那么fromElement
,toElement
都可以比较- 如果此
SortedSet
时通过所有元素都实现Comparatable
比较的,那么这两个入参得可以和所有元素比较- 返回的结果是
fail-fast
的
SortedSet<E> headSet(E toElement);
返回比入参小的子集,所有要注意的和上一个方法相同。
SortedSet<E> tailSet(E fromElement);
返回比入参大的子集,所有要注意的和上一个方法相同。
default Spliterator<E> spliterator();
涉及jdk8的一个新对象,后续会继续研究。
设计模式思考
无
遗留问题
Spliterator
类解读。
网友评论