这两个接口提供排序操作,实现他们的子类都具有接口中定义的功能。Set和Map本身不具备排序功能,提供了SortedMap和SortedSet接口之后可以在提供排序方案的同时,增加更多的获取集合特定位置元素的方法。类似:结合的第一个元素,最后一个元素,位于特定元素之间的元素等。
SortedSet接口
所有已知实现类:

ConcurrentSkipListSet, TreeSet

//SortedSet提供的方法:
java.util.SortedSet.comparator()//自己定义比较器,对内部元素排序
java.util.SortedSet.first()//第一个元素
java.util.SortedSet.headSet(E e)//e之前的元素,不包括e
java.util.SortedSet.last()//最后一个元素
java.util.SortedSet.spliterator()//Java8新增,生成Spliterator接口,有点类似nio里的selector
java.util.SortedSet.subSet(E e1, E e2)//e1和e2之间的元素
java.util.SortedSet.tailSet(E e)//e之后的元素,包括e

TreeSet
基于排列顺序实现元素不重复
实现了SortedSet接口,对集合元素自动排序
元素对象的类型必须实现Comparable接口,指定排序规则
通过CompareTo方法确定是否为重复元素

TreeSet的基本使用

 //利用实现了SortedSet的TreeSet做实验SortedSet<String> sortedTreeSet = new TreeSet<String>(); // SortedSet接收TreeSet的实例 // 增加元素sortedTreeSet.add("aa");sortedTreeSet.add("bb");sortedTreeSet.add("cc");sortedTreeSet.add("dd");// 重复元素,不能 加入sortedTreeSet.add("aa");sortedTreeSet.add("bb");// 增加元素sortedTreeSet.add("ee");System.out.println("共有多少个元素:" + sortedTreeSet.size());//添加了7个元素,减去重复的剩余5个System.out.println("第一个元素:" + sortedTreeSet.first());//第一个元素:aaSystem.out.println("最后一个元素:" + sortedTreeSet.last());//最后一个元素:eeSystem.out.println("headSet元素:" + sortedTreeSet.headSet("cc"));//cc之前的元素:[aa bb ]System.out.println("tailSet元素:" + sortedTreeSet.tailSet("cc"));//cc之后的元素:[cc dd ee]System.out.println("subSet元素:" + sortedTreeSet.subSet("bb", "dd"));//bb到dd之间的元素:[bb cc]//     System.out.println("spliterator元素:" + sortedTreeSet.spliterator());// Java8 中提供//通过在创建集合的时候就指定他的比较规则,使用的是Comparator,匿名内部类
//实现SortedSet.comparator()功能,此处定义了一个Man类,包括name和age,然后加入new Comparator,后面的SortedMap也具有此接口,不在讲解。SortedSet<Man> sortedManSet = new TreeSet<Man>(new Comparator<Man>() {@Overridepublic int compare(Man o1, Man o2) {// TODO Auto-generated method stubreturn o1.getAge()-o2.getAge();}}); Man m1=new Man("li1",22);Man m2=new Man("li2",25);Man m3=new Man("li3",19);Man m4=new Man("li4",23);Man m5=new Man("li5",21);sortedManSet.add(m1);sortedManSet.add(m2);sortedManSet.add(m3);sortedManSet.add(m4);sortedManSet.add(m5);Iterator interator2=sortedManSet.iterator();while(interator2.hasNext()){Man man=(Man)interator2.next();System.out.println("man name =="+man.getName());}System.out.println("=====================================");结果:共有多少个元素:5第一个元素:aa最后一个元素:eeheadSet元素:[aa, bb]tailSet元素:[cc, dd, ee]subSet元素:[bb, cc]=====================================排序之后man name ==li3man name ==li5man name ==li1man name ==li4man name ==li2=====================================

实现SortedSet接口,对集合元素自动排序
元素对象的类型必须实现Comparable接口,指定排序规则
通过CompareTo方法确定是否为重复元素, 自己定义比较的规则 ,先比较姓名再比较年龄

public class Man implements Comparable<Man> {@Overridepublic int compareTo(Man o) {int n1 = this.getName().compareTo(o.getName());int n2 = this.age.compareTo(o.age);return n1==0? n2 : n1;}}

compareTo方法返回值为 0 ,认为是重复元素

如果将compareTo()返回值写死为0,元素值每次比较,都认为是相同的元素,这时就不再向TreeSet中插入除第一个外的新元素。所以TreeSet中就只存在插入的第一个元素。
如果将compareTo()返回值写死为1,元素值每次比较,都认为新插入的元素比上一个元素大,于是二叉树存储时,会存在根的右侧,读取时就是正序排列的。
如果将compareTo()返回值写死为-1,元素值每次比较,都认为新插入的元素比上一个元素小,于是二叉树存储时,会存在根的左侧,读取时就是倒序序排列的。

SortedMap 接口
public interface SortedMap<K,V> extends Map<K,V> {

所有已知实现类:
ConcurrentSkipListMap, TreeMap

接口提供的方法:

java.util.SortedMap.comparator()//接收比较器,用于Map排序
java.util.SortedMap.entrySet() //后去Map中的entrySet集合
java.util.SortedMap.firstKey() //第一个key
java.util.SortedMap.headMap(K k)//在k之前的键值对
java.util.SortedMap.keySet() //获取key的set集合
java.util.SortedMap.lastKey() //最后的key
java.util.SortedMap.subMap(K k1, K k2)//k1,k2之间的键值对
java.util.SortedMap.tailMap(K) //集合最后的键值对
java.util.SortedMap.values() //集合所有的values

SortedMap使用

SortedMap<String,Integer> sortedTreeMap = new TreeMap<String,Integer>(); // SortedMap接收TreeMap的实例 // 增加元素sortedTreeMap.put("aa", 11);sortedTreeMap.put("bb", 22);sortedTreeMap.put("cc", 33);sortedTreeMap.put("dd", 44);sortedTreeMap.put("ee", 55);System.out.println("共有多少个元素:" + sortedTreeMap.size());//添加了7个元素,减去重复的剩余5个System.out.println("entrySet:" + sortedTreeMap.entrySet());//所有的键值对System.out.println("第一个元素:" + sortedTreeMap.firstKey());//第一个key元素System.out.println("最后一个元素:" + sortedTreeMap.lastKey());//最后一个key元素System.out.println("headSet元素:" + sortedTreeMap.headMap("cc"));//cc之前的元素System.out.println("tailSet元素:" + sortedTreeMap.tailMap("cc"));//cc之后的元素System.out.println("subSet元素:" + sortedTreeMap.subMap("aa", "dd"));//aa到dd之间的元素System.out.println("subSet元素:" + sortedTreeMap.values());//values,所有的value值

Java 集合之SortedSet和SortedMap相关推荐

  1. Java 集合之 SortedSet 和 SortedMap

    目录 1. SortedSet 接口 (1)Set 操作 (2)范围操作 (3)端点操作 (4)比较器访问 2.SortedMap 接口 1. SortedSet 接口 SortedSet 是一个按升 ...

  2. Java集合6 (SortedSet)

    2019独角兽企业重金招聘Python工程师标准>>> java.util.SortedSet接口是java.util.Set接口的一个子接口.处了元素顺序由 自身内部进行排序外其它 ...

  3. 【Java集合框架】22 ——SortedMap 接口

    一.SortedMap 接口外部介绍 SortedMap是集合框架中的一个接口.该接口扩展了Map接口,并提供了其元素的总排序(可以按键的排序顺序遍历元素).实现这个接口的类是TreeMap. 1.1 ...

  4. 1、java集合:java集合详解及类关系图

    List和Set继承自Collection接口. Set无序不允许元素重复.HashSet和TreeSet是两个主要的实现类. List有序且允许元素重复,支持null对象.ArrayList.Lin ...

  5. java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类...

    本文关键词: java集合框架  框架设计理念  容器 继承层级结构 继承图 集合框架中的抽象类  主要的实现类 实现类特性   集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确 ...

  6. Java集合框架List,Map,Set等全面介绍

    Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构. Java集合框架的基本接口/类层次结构: java.util.Colle ...

  7. java集合框架图(一)

    一.集合类简介 Java集合就像一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)"丢进"该容器中.从Java 5 增加了泛型以后,Java集合可以记住容器中对象的数 ...

  8. linux视频教程百度网盘分享,Java集合基础知识总结(绝对经典

    2.JAVA集合可以存储和操作数目不固定的一组数据. 3.若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用. 注:使用相应的toArray()和Arr ...

  9. Java集合总结汇总(链接)

    Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构. Java集合框架的基本接口/类层次结构: java.util.Colle ...

最新文章

  1. Java虚拟机工作原理
  2. idea编辑器关闭重复代码检查
  3. 多媒体个人计算机能处理什么,多媒体计算机可以处理的信息类型有哪些
  4. (hdu step 7.2.1)The Euler function(欧拉函数模板题——求phi[a]到phi[b]的和)
  5. PHP的函数file_get_contents() 把整个文件读入一个字符串中
  6. css transtion不生效_CSS中transition属性不起作用的原因及解决方法
  7. Python 获取重定向url
  8. 2021抚顺高考成绩查询,2021年抚顺高考成绩排名及成绩公布时间什么时候出来
  9. intellij idea开发工具
  10. 计算机网络原理html,计算机网络原理与应用html..ppt
  11. C++ Qt学习笔记(3)QT中的文本处理
  12. 密码学研究-加密解密
  13. 编译原理-LR分析技术(自己看)
  14. 5分钟学会马尔科夫模型
  15. 关于中国移动宽带(中国铁通)比较卡
  16. 后台管理系统中的antd vue中的问题(动态加载列表a-select-option,后台管理中a-selct-option的回显)
  17. Android 下拉选择框自定义view
  18. Cookie在前端写还是后端?
  19. IDEAidea背景设置
  20. 攻防世界MISC之掀桌子

热门文章

  1. 《设计心理学》学习笔记之设计未来(第四册)
  2. ERP打印入库单(四十)
  3. servlet那边处理完登录,在jsp这边弹框显示结果
  4. python中字符串转数组、数组转字符串
  5. 微信小程序没有找到可以构建的NPM包,请确认需要参与构建的npm在miniprogramroot目录
  6. 博客登录注册界面的实现
  7. 在培训机构花了好几万学Java,当了程序员还常被鄙视,这是招谁惹谁了?
  8. DataGrip使用(一)安装图文详细版(5月19更新)
  9. MS COCO数据集输出数据的结果格式(result format)和如何参加比赛(participate)(来自官网)
  10. 华科计算机硕士毕业论文,华科硕士论文格式