Java集合-SortedSet

Java集合-SortedSetSortedSet java util SortedSet 是 Set 接口的子类 Sortedset 接口的行为类似于普通 Set 但它包含的元素是在内部排序的 这意味着 当迭代 SortedSet 的元素时 这些元素将按排序的顺序进行迭代 SortedSet 的实现 TreeSetColle 中 SortedSet 中只有一个实现 java util TreeSet 类 java util concurrent 也有此接口的一个实现 java util concurrent ConcurrentSk

SortedSetjava.util.SortedSet)是Set接口的子类Sortedset接口的行为类似于普通Set,但它包含的元素是在内部排序的, 这意味着,当迭代SortedSet的元素时,这些元素将按排序的顺序进行迭代。

SortedSet的实现TreeSet

Collections APISortedSet 中只有一个实现java.util.TreeSet类,java.util.concurrent也有此接口的一个实现java.util.concurrent. ConcurrentSkipListSet

创建TreeSet

下面是创建TreeSet的例子:

 
SortedSet sortedSet = new TreeSet(); 

Comparator 作为参数创建TreeSet

创建TreeSet时,可以将Comparator 作为构造函数的参数,Comparator 将觉得元素在TreeSet中的排序,下面是例子:

Comparator comparator = new MyComparatorImpl(); SortedSet sortedSet = new TreeSet(comparator);

 

排序顺序

SortedSet默认的排序顺序是自然顺序,为了使SortedSet能够确定元素的自然顺序,元素必须实现java.lang.Comparable接口。如果元素没有实现Comparable接口,那么元素没有自然顺序。另外一种就是,当创建TreeSet时必须将Comparator 的实现作为参数,下面是代码:

Comparator comparator = new MyComparator(); SortedSet sortedSet = new TreeSet(comparator);

 

升序与倒序排序

SortedSet 默认的迭代顺序是升序排序,开始是最小的元素,慢慢变大。但是可以通过TreeSet.descendingIterator()编程降序排序,下面是降序排序的例子:

TreeSet treeSet = new TreeSet(); treeSet.add("one"); treeSet.add("two"); treeSet.add("three"); Iterator iterator = treeSet.descendingIterator(); while(iterator.hasNext()) {     String element = (String) iterator.next();     System.out.println(element); }

 

获取Comparator

如果创建 SortedSet时使用了 Comparator参数,那么可以通过SortedSet comparator()方法获取Comparator ,下面是例子:

 
Comparator comparator = sortedSet.comparator(); 

增加元素

和普通的Set一样通过add()方法增加元素:

SortedSet sortedSet = new TreeSet(); sortedSet.add("one");

 

移除元素

可以通过remove()方法移除元素:

 
sortedSet.remove("one"); 

获取第一个元素

可以通过first()方法获取SortedSet  中排序顺序的第一个元素:

 
Object firstElement = sortedSet.first(); 

获取最后一个元素

可以通过last()方法获取SortedSet  中排序顺序的最后一个元素:

 
Object lastElement = sortedSet.last(); 

迭代SortedSet

SortedSet 的迭代和普通的Set迭代一样, SortedSet iterator()方法返回一个Iterator,然后可以通过这个Iterator迭代元素,下面是例子:

SortedSet sortedSet = new TreeSet(); sortedSet.add("one"); sortedSet.add("two"); sortedSet.add("three"); Iterator iterator = sortedSet.iterator(); while(iterator.hasNext()) {     String element = (String) iterator.next();     System.out.println(element); }

 

获取前面的Set

SortedSet接口的 headSet()方法,可以返回小于当前元素的 新的SortedSet,下面是代码:

SortedSet sortedSet = new TreeSet(); sortedSet.add("a"); sortedSet.add("b"); sortedSet.add("c"); sortedSet.add("d"); sortedSet.add("e"); SortedSet headSet = sortedSet.headSet("c");

 

执行完代码后,headSet包含 "a"  "b",因为这两个元素小于"c" 

获取后面的Set

SortedSet接口中tailSet()方法可以返回一个大于等于给定参数元素的 SortedSet,下面是代码:

SortedSet sortedSet = new TreeSet(); sortedSet.add("a"); sortedSet.add("b"); sortedSet.add("c"); sortedSet.add("d"); sortedSet.add("e"); SortedSet tailSet = sortedSet.tailSet("c");

 

执行完后 tailSet中包含 "c""d""e",因为这三个元素大于等于"c"

获取子集

SortedSet接口有个subSet()方法,这个方法返回SortedSet 的子集,有两个参数,大于等于第一个参数,小于第二个参数:

SortedSet sortedSet = new TreeSet(); sortedSet.add("a"); sortedSet.add("b"); sortedSet.add("c"); sortedSet.add("d"); sortedSet.add("e"); SortedSet subSet = sortedSet.subSet("c", "e");

 

执行完代码后,subSet包含"c" "d",因为这两个元素大于等于"c" (第一个参数),小于"e" (第二个参数)

SortedSet的泛型

定义SortedSet是可以使用泛型:

SortedSet 
   
     sortedSet = new TreeSet<>(); 
   

 

这个SortedSet 中只能包含String类型的元素,也就是意味着获取元素时不需要再强制类型转换,下面是代码:

SortedSet 
   
     sortedSet = new TreeSet<>(); sortedSet.add("one"); sortedSet.add("two"); sortedSet.add("three"); Iterator iterator = sortedSet.iterator(); while(iterator.hasNext()) {     String element = iterator.next();     System.out.println(element); } 
   

 

注意这儿iterator.next()返回的不许要再强制类型转换,因为使用了泛型。

参考:1. http://tutorials.jenkov.com/java-collections/sortedset.html

   2.https://blog.csdn.net/cgsyck/article/details/

          3.https://blog.csdn.net/cgsyck/article/details/

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177867.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午6:34
下一篇 2026年3月26日 下午6:34


相关推荐

  • L2-014 列车调度 (25 分)详解

    L2-014 列车调度 (25 分)详解火车站的列车调度铁轨的结构如下图所示。两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?输入格式:输入第一行给出一个整数N…

    2022年7月26日
    9
  • 关于ICache和DCache

    关于ICache和DCache从不同地方总结摘录而来 附上原文链接原文 https blog csdn net article details nbsp nbsp ICache 和 DCache 是一种内存 虽然目前接触了好几种内存 寄存器 DDR 等 它们在物理上的工作原理虽然不同 但是访问属性却很像 在速度上 nbsp CPU gt 寄存器 gt Cache gt DDR nbsp 在容量上 nbsp C

    2026年3月26日
    4
  • [源力觉醒 创作者计划]_文心一言 4.5开源深度解析:性能狂飙 + 中文专精

    [源力觉醒 创作者计划]_文心一言 4.5开源深度解析:性能狂飙 + 中文专精

    2026年3月12日
    1
  • 后盾人教程_最专业的后盾

    后盾人教程_最专业的后盾CSS3系列课程开课了,老铁快上车吧一引用CSS差别link标签:外部style标签:内联style属性:嵌入式注释:/**/结尾:分号,不能省略css导入其他css样式:@i

    2022年8月4日
    7
  • Java三种注释方式

    Java三种注释方式1 单行注释 2 多行注释 开始 结束 3 文档注释 通常是对程序中某个类或类中的方法进行的系统性的解释说明 开发人员可以使用 JDK 提供的 javadoc 工具将文档注释提取出来生成一份 API 帮助文档 文档注释以符号 开头 并以符号 结尾 packagec02 s01 p02 功能 两个数求和 作者 文雅兰 日期 2022 年 03 月 03 日 publicclassE 主方法 程

    2026年3月16日
    2
  • linux vim常用命令_linuxvi编辑器命令

    linux vim常用命令_linuxvi编辑器命令1.vi模式a)一般模式:vi处理文件时,一进入该文件,就是一般模式了.b)编辑模式:在一般模式下可以进行删除,复制,粘贴等操作,却无法进行编辑操作。等按下‘i,I,o,O,a,A,r,R’等字母之后才能进入编辑模式.通常在linux中,按下上述字母时,左下方会出现’INSERT’或者‘REPLACE’字样,才可以输入任何文字到文件中.要回到一般模式,按下[ESC]键即可.c)命令行模…

    2026年2月16日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号