集合涉及到的排序方式
List集合排序
List对象集合按照对象的某个属性排序
public static void sort(List list) :将集合中元素按照默认规则排序。
sort方法:
public static void sort(List list,Comparator<? super T> ) :将集合中元素按照指定规则排
序。
- public static void sort(List list,Comparator<? super T> ) :将集合中元素按照指定规则排
序。
int compare(T o1, T o2);目的就是为了比较o1和o2的大小
原始的排序:o1 , o2
返回值int:只关心正负或者0如果返回值为负数:o1 < o2 ==> o1 o2如果返回值为正数:o1 > o2 ==> o2 o1如果返回值为0:o1 == o2 ==> o1 o2
public class Demo01 {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("abc12");list.add("AA");list.add("1ab123123");list.add("abdsdfsd");list.add("Abcsdfsfsdfsdsdg");list.add("2bcsd");Collections.sort(list);System.out.println("list = " + list);//按照字符串的长度升序排序Collections.sort(list, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return o1.length()-o2.length();}});System.out.println("list = " + list);}
}
区别:
Comparable:是让一个类具备比较排序的功能
Comparator:自己定义的一个比较器
注意:如果比较的属性类型是浮点型
public int compareTo(T o); //抽象方法
//子类实现后,需要进行重写返回值int,只关心正负或者0,不需要关系具体值原始排序:this【我】 o【他】
如果要升序排序:我减他
如果要降序排序:他-我如果比较的属性类型是浮点型:this.score = 99.9 o.score = 99.5if(this.score>o.score){return 1;}else if(this.score<0.score){return -1;}else{return 0;}
按照对象单属性升序,降序排序
/**
* 对象单属性升序,降序排序
*/
private void entitySort1(){
//Student 的 list 集合
List<Student> students = new ArrayList<>();
students.add(new Student("张三",90,180,"电气学院","北京"));
students.add(new Student("李四",80,165,"计算机学院","上海"));
students.add(new Student("王五",91,170,"财经学院","上海"));
students.add(new Student("赵明",80,182,"计算机学院","北京"));
students.add(new Student("钱海",75,181,"计算机学院","广州"));
students.add(new Student("孙理",82,172,"财经学院","上海"));
students.add(new Student("周伟",90,168,"电气学院","广州"));
students.add(new Student("郑亮",80,178,"财经学院","广州"));
System.out.println("原始数据:");
students.forEach(s ->{
System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+ s.getCollege()+""+s.getAddress());});
System.out.println("按照分数升序排序:");
students.sort(comparing(Student::getScore));
students.forEach(s ->{
System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+ s.getCollege()+""+s.getAddress());});
System.out.println("按照分数降序排序:");
students.sort(comparing(Student::getScore).reversed());
students.forEach(s ->{
System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());});
}
Map排序
Hashmap排序则按照map中的value进行排序先将map的转换为list,在将list进行排序 //对map进行排序 List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(dataTotalSummap.entrySet()); Collections.sort(list,new Comparator<Map.Entry<String,Integer>>() {//降序排序public int compare(Map.Entry<String, Integer> o1,Map.Entry<String, Integer> o2) {return -(o1.getValue().compareTo(o2.getValue()));//升序排序则去除富豪}});
按照对象自定义单属性的顺序排序
/**
* 对象自定义单属性的顺序排序
*/
private void entitySort3(){
//Student 的 list 集合
List<Student> students = new ArrayList<>();
students.add(new Student("张三",90,180,"电气学院","北京"));
students.add(new Student("李四",80,165,"计算机学院","上海"));
students.add(new Student("王五",91,170,"财经学院","上海"));
students.add(new Student("赵明",80,182,"计算机学院","北京"));
students.add(new Student("钱海",75,181,"计算机学院","广州"));
students.add(new Student("孙理",82,172,"财经学院","上海"));
students.add(new Student("周伟",90,168,"电气学院","广州"));
students.add(new Student("郑亮",80,178,"财经学院","广州"));
System.out.println("原始数据:");
students.forEach(s ->{
System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());});
System.out.println("自定义按照地区(北京,上海,广州)排序:");
List<String> addressOrder = Arrays.asList("北京","上海","广州");
Collections.sort(students, new Comparator<Student>()
{
public int compare(Student student1, Student student2)
{
int io1 = addressOrder.indexOf(student1.getAddress());
int io2 = addressOrder.indexOf(student2.getAddress());
return io1 - io2;
}
});
students.forEach( s ->{
System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());});
按照对象自定义多属性的顺序排序
*** 对象自定义多属性的顺序排序*/
private void entitySort4(){//Student 的 list 集合List<Student> students = new ArrayList<>();students.add(new Student("张三",90,180,"电气学院","北京"));students.add(new Student("李四",80,165,"计算机学院","上海"));students.add(new Student("王五",91,170,"财经学院","上海"));students.add(new Student("赵明",80,182,"计算机学院","北京"));students.add(new Student("钱海",75,181,"计算机学院","广州"));students.add(new Student("孙理",82,172,"财经学院","上海"));students.add(new Student("周伟",90,168,"电气学院","广州"));students.add(new Student("郑亮",80,178,"财经学院","广州"));System.out.println("原始数据:");students.forEach(s ->{System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());});System.out.println("先按照学院(电气学院,计算机学院,财经学院)排序, 当学院相同时,按照地区(北京,上海,广州)排序");List<String> collegeOrder = Arrays.asList("电气学院","计算机学院","财经学院");List<String> addressOrder = Arrays.asList("北京","上海","广州");Collections.sort(students, new Comparator<Student>(){public int compare(Student student1, Student student2){if(student1.getCollege().equals(student2.getCollege())){int io1 = addressOrder.indexOf(student1.getAddress());int io2 = addressOrder.indexOf(student2.getAddress());return io1 - io2;}else{int io1 = collegeOrder.indexOf(student1.getCollege());int io2 = collegeOrder.indexOf(student2.getCollege());return io1 - io2;}}});students.forEach( s ->{System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());});
}
}
TreeMap
TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。
Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)
方法即可实现排序,该方法主要是根据第一个参数o1,小于、等于或者大于o2分别返回负整数、0或者正整数。如下:
public class TreeMapTest {public static void main(String[] args) {Map<String, Object> map = new TreeMap<String, Object>(new Comparator<String>() {@Overridepublic int compare(String obj1, String obj2) {// 降序排序return obj2.compareTo(obj1);}});map.put("2019-03", "ccccc");
目录
List集合排序
sort方法:
按照对象单属性升序,降序排序
Map排序
按照对象自定义单属性的顺序排序
按照对象自定义多属性的顺序排序
TreeMap
map.put("2018-12", "aaaaa");map.put("2019-01", "bbbbb");map.put("2019-02", "ddddd");Set<String> keySet = map.keySet();Iterator<String> iter = keySet.iterator();while (iter.hasNext()) {String key = iter.next();System.out.println(key + ":" + map.get(key));}}
}
运行结果如下:
2019-03:ccccc
2019-02:ddddd
2019-01:bbbbb
2018-12:aaaaa
集合涉及到的排序方式相关推荐
- 集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称
文章目录 集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称 ...
- TreeSet集合排序方式一:自然排序Comparable
TreeSet集合默认会进行排序.因此必须有排序,如果没有就会报类型转换异常. 自然排序 Person class->实现Comparable,实现compareTo()方法 package H ...
- day06-元组字典集合常用两种排序
Day06-元组&字典&集合&常用两种排序 一.tuple元组 1.概述 和列表相似,本质上是一种有序的集合 元组和列表的不同之处: a.列表:[ ] 元组:( ) b ...
- Java 集合之给ArrayList排序
Java 集合之给ArrayList排序 ArrayList的排序可以借助Collections工具类的sort(List list)以及重载的sort(List list, Comparator&l ...
- Map集合遍历的三种方式
Map集合遍历的三种方式 遍历Map集合的三种方式 键找值 键值对 Lambda表达式 方式一 : 键找值 先获取Map集合的全部键的Set集合 遍历键的Set集合,然后通过键提取对应值 原理图 键找 ...
- 【Java 8 新特性】Java Comparator.thenComparing | 添加次级排序方式
Java Comparator.thenComparing | 添加次级排序方式 Comparator.thenComparing Comparator.thenComparingInt Compar ...
- Map集合的按时间排序方法
Map集合的按时间排序方法 一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map.map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及Li ...
- sont表示元素在存入集合时进行了排序,数据遍历的结果是按某个排序规则输出的
单选 sont表示元素在存入集合时进行了排序,数据遍历的结果是按某个排序规则输出的;而order表示每次遍历的序列都是一样的,元素前后关系每次遍历都是确定的,那么下列哪些集合既是sort,又是orde ...
- Java两种排序方式快慢比较
2019独角兽企业重金招聘Python工程师标准>>> Java中List的排序方式有两种,现在我们测试下这两种排序方式的快慢吧,我们需要用到两个类, 一个是运行程序的Main类,另 ...
- Map集合遍历的四种方式理解和简单使用
Map集合遍历的四种方式理解和简单使用 ~Map集合是键值对形式存储值的,所以遍历Map集合无非就是获取键和值,根据实际需求,进行获取键和值 1:无非就是通过map.keySet()获取到值,然后根据 ...
最新文章
- 【JZOJ5064】【GDOI2017第二轮模拟day2】友好城市 Kosarajo算法+bitset+ST表+分块
- 給曾經的三年,寫點什么吧。-紀念華軟
- 汇编语言基础知识摘要(《汇编语言》王爽)第 3 / 17 章
- 页面实现文字滚动效果(跑马灯)
- 9、C语言中sscanf使用及运算符优先级
- 剖析Caffe源码之ImageDataLayer
- rn项目 假如cocoapods_React Native 如何集成到原生IOS项目中?
- Kubernetes持久化存储Cephfs
- cuda Memory Fence Functions
- php.ini 是否设置路由,php – 如何在路由INI文件中为Zend Framework中的子域编写路由链?...
- 把excel数据生成sql insert语句
- 华为计算机充电指示灯,数码产品:华为p40充电指示灯不亮在哪里设置 有指示灯吗...
- miniblink每日最新下载地址
- 1586 - Molar mass
- 有关电脑的英语单词(英汉对照)
- skewx 字体模糊_Pixelmator:从此修图不再叫做 “PS”
- CSAPP Bomb Lab
- HTML-简单表格制作
- 心跳异常检测--使用Keras,K折交叉训练CNN一维卷积
- 推荐系统概述推荐系统算法简介