Java 集合之SortedSet和SortedMap
这两个接口提供排序操作,实现他们的子类都具有接口中定义的功能。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相关推荐
- Java 集合之 SortedSet 和 SortedMap
目录 1. SortedSet 接口 (1)Set 操作 (2)范围操作 (3)端点操作 (4)比较器访问 2.SortedMap 接口 1. SortedSet 接口 SortedSet 是一个按升 ...
- Java集合6 (SortedSet)
2019独角兽企业重金招聘Python工程师标准>>> java.util.SortedSet接口是java.util.Set接口的一个子接口.处了元素顺序由 自身内部进行排序外其它 ...
- 【Java集合框架】22 ——SortedMap 接口
一.SortedMap 接口外部介绍 SortedMap是集合框架中的一个接口.该接口扩展了Map接口,并提供了其元素的总排序(可以按键的排序顺序遍历元素).实现这个接口的类是TreeMap. 1.1 ...
- 1、java集合:java集合详解及类关系图
List和Set继承自Collection接口. Set无序不允许元素重复.HashSet和TreeSet是两个主要的实现类. List有序且允许元素重复,支持null对象.ArrayList.Lin ...
- java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类...
本文关键词: java集合框架 框架设计理念 容器 继承层级结构 继承图 集合框架中的抽象类 主要的实现类 实现类特性 集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确 ...
- Java集合框架List,Map,Set等全面介绍
Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构. Java集合框架的基本接口/类层次结构: java.util.Colle ...
- java集合框架图(一)
一.集合类简介 Java集合就像一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)"丢进"该容器中.从Java 5 增加了泛型以后,Java集合可以记住容器中对象的数 ...
- linux视频教程百度网盘分享,Java集合基础知识总结(绝对经典
2.JAVA集合可以存储和操作数目不固定的一组数据. 3.若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用. 注:使用相应的toArray()和Arr ...
- Java集合总结汇总(链接)
Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构. Java集合框架的基本接口/类层次结构: java.util.Colle ...
最新文章
- Java虚拟机工作原理
- idea编辑器关闭重复代码检查
- 多媒体个人计算机能处理什么,多媒体计算机可以处理的信息类型有哪些
- (hdu step 7.2.1)The Euler function(欧拉函数模板题——求phi[a]到phi[b]的和)
- PHP的函数file_get_contents() 把整个文件读入一个字符串中
- css transtion不生效_CSS中transition属性不起作用的原因及解决方法
- Python 获取重定向url
- 2021抚顺高考成绩查询,2021年抚顺高考成绩排名及成绩公布时间什么时候出来
- intellij idea开发工具
- 计算机网络原理html,计算机网络原理与应用html..ppt
- C++ Qt学习笔记(3)QT中的文本处理
- 密码学研究-加密解密
- 编译原理-LR分析技术(自己看)
- 5分钟学会马尔科夫模型
- 关于中国移动宽带(中国铁通)比较卡
- 后台管理系统中的antd vue中的问题(动态加载列表a-select-option,后台管理中a-selct-option的回显)
- Android 下拉选择框自定义view
- Cookie在前端写还是后端?
- IDEAidea背景设置
- 攻防世界MISC之掀桌子