美文网首页
17-SortedSet

17-SortedSet

作者: 鹏程1995 | 来源:发表于2020-02-04 09:27 被阅读0次

类介绍

类定位

SortedSet,直接翻译过来就是有序集合。所以集合Set是和List一样有顺序的。。。。。。。。。(卧槽,看到这里才反应过来),尴尬。

它在Set的基础上新加了一些方法,和顺序有关的。

类继承关系分析

直接上截图:

1.png

SortedSet这个接口从最上边一条线继承下来的,一目了然。我们不如温习一下各个层都有什么用:

  1. Iterable提出了遍历和删除的相关操作
  2. CollectionIterable的基础上增加了求数量、添加、转化数组、判断存在等操作,并丰富了遍历、删除操作。
  3. SetCollection的基础上没有新加方法,只是定义出一层。
  4. SortedSetSet的基础上增加了比较和排序的功能,并增加了与之相关的一些方法。

类使用场景

有序存储时。

说实话,我基本没用过。用到时再说吧。

类注意事项

  1. 构造方法:SortedSet建议提供四个构造方法,当然,你不提供我们也没办法,毕竟interface不能对constructor方法进行限制。。。多提供也行,看心情喽
    • 传入空,以自然顺序创造一个空集合
    • 传入Collection,以此Collection、自然顺序为依据构造SortedSet
    • 传入Comparator,以此Comparator规定的顺序创造一个空集合
    • 传入SortedSet,以传入的SortedSet规定的顺序、传入的SortedSet中的元素集为集合创造一个SortedSet【这个是不是有点像emmmmm,装饰器模式,当然这是构造型不是结构型,而且本意不是增加功能】
  2. 涉及比较,又是老生常谈的compare(),compareTo()的结果必须和equals()一致。但是,SortedSet涉及对象的比较,只用了compare()/compareTo()。。。。。你可以作,这里可以完美运作**
  3. 默认获得某一段下标范围的元素,都是半开的,即包括开头元素,不包括结尾元素,当然,你可以定制,传入的某些参数值改改变成左开/全闭/全开。看你怎么实现了。

类源码介绍

源码解析

Comparator<? super E> comparator();

返回本SortedSet中的比较类(如果在构造函数专门初始化了的话)

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

获得此集合的一个子类,值介于两个入参之间,如果元素集合中存在和两个入参相等的边缘,那么结果包括fromElement,不包括toElement

注意:

  1. 如果两个入参相等,那么返回结果为空集合。【注意,这里我为什么不写(fromElement==toElement) =true?】【SortedSet不用这些东西,只用Comparator/Comparatable
  2. 传入的参数必须为可比较的,情况有二:
    1. 如果此SortedSet是通过Comparator比较的,那么fromElement,toElement都可以比较
    2. 如果此SortedSet时通过所有元素都实现Comparatable比较的,那么这两个入参得可以和所有元素比较
  3. 返回的结果是fail-fast

SortedSet<E> headSet(E toElement);

返回比入参小的子集,所有要注意的和上一个方法相同。

SortedSet<E> tailSet(E fromElement);

返回比入参大的子集,所有要注意的和上一个方法相同。

default Spliterator<E> spliterator();

涉及jdk8的一个新对象,后续会继续研究。

设计模式思考

遗留问题

Spliterator类解读。

相关文章

  • 17-SortedSet

    类介绍 类定位 SortedSet,直接翻译过来就是有序集合。所以集合Set是和List一样有顺序的。。。。。。。...

网友评论

      本文标题:17-SortedSet

      本文链接:https://www.haomeiwen.com/subject/hpphxhtx.html