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排序

  1. 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

集合涉及到的排序方式相关推荐

  1. 集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称

    文章目录 集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称 ...

  2. TreeSet集合排序方式一:自然排序Comparable

    TreeSet集合默认会进行排序.因此必须有排序,如果没有就会报类型转换异常. 自然排序 Person class->实现Comparable,实现compareTo()方法 package H ...

  3. day06-元组字典集合常用两种排序

    Day06-元组&字典&集合&常用两种排序 一.tuple元组 1.概述 和列表相似,本质上是一种有序的集合 元组和列表的不同之处: ​ a.列表:[ ] 元组:( ) ​ b ...

  4. Java 集合之给ArrayList排序

    Java 集合之给ArrayList排序 ArrayList的排序可以借助Collections工具类的sort(List list)以及重载的sort(List list, Comparator&l ...

  5. Map集合遍历的三种方式

    Map集合遍历的三种方式 遍历Map集合的三种方式 键找值 键值对 Lambda表达式 方式一 : 键找值 先获取Map集合的全部键的Set集合 遍历键的Set集合,然后通过键提取对应值 原理图 键找 ...

  6. 【Java 8 新特性】Java Comparator.thenComparing | 添加次级排序方式

    Java Comparator.thenComparing | 添加次级排序方式 Comparator.thenComparing Comparator.thenComparingInt Compar ...

  7. Map集合的按时间排序方法

    Map集合的按时间排序方法 一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map.map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及Li ...

  8. sont表示元素在存入集合时进行了排序,数据遍历的结果是按某个排序规则输出的

    单选 sont表示元素在存入集合时进行了排序,数据遍历的结果是按某个排序规则输出的;而order表示每次遍历的序列都是一样的,元素前后关系每次遍历都是确定的,那么下列哪些集合既是sort,又是orde ...

  9. Java两种排序方式快慢比较

    2019独角兽企业重金招聘Python工程师标准>>> Java中List的排序方式有两种,现在我们测试下这两种排序方式的快慢吧,我们需要用到两个类, 一个是运行程序的Main类,另 ...

  10. Map集合遍历的四种方式理解和简单使用

    Map集合遍历的四种方式理解和简单使用 ~Map集合是键值对形式存储值的,所以遍历Map集合无非就是获取键和值,根据实际需求,进行获取键和值 1:无非就是通过map.keySet()获取到值,然后根据 ...

最新文章

  1. 【JZOJ5064】【GDOI2017第二轮模拟day2】友好城市 Kosarajo算法+bitset+ST表+分块
  2. 給曾經的三年,寫點什么吧。-紀念華軟
  3. 汇编语言基础知识摘要(《汇编语言》王爽)第 3 / 17 章
  4. 页面实现文字滚动效果(跑马灯)
  5. 9、C语言中sscanf使用及运算符优先级
  6. 剖析Caffe源码之ImageDataLayer
  7. rn项目 假如cocoapods_React Native 如何集成到原生IOS项目中?
  8. Kubernetes持久化存储Cephfs
  9. cuda Memory Fence Functions
  10. php.ini 是否设置路由,php – 如何在路由INI文件中为Zend Framework中的子域编写路由链?...
  11. 把excel数据生成sql insert语句
  12. 华为计算机充电指示灯,数码产品:华为p40充电指示灯不亮在哪里设置 有指示灯吗...
  13. miniblink每日最新下载地址
  14. 1586 - Molar mass
  15. 有关电脑的英语单词(英汉对照)
  16. skewx 字体模糊_Pixelmator:从此修图不再叫做 “PS”
  17. CSAPP Bomb Lab
  18. HTML-简单表格制作
  19. 心跳异常检测--使用Keras,K折交叉训练CNN一维卷积
  20. 推荐系统概述推荐系统算法简介

热门文章

  1. 使用netsh interface ip set 命令实现快速切换IP地址及DNS地址
  2. nmap命令扫描存活主机
  3. 医疗行业软件开发流程-立项阶段
  4. PMP知识点速记——4.1制定项目章程
  5. 局域网搭建git服务器
  6. 手写数字识别mnist
  7. STM32F103单片机驱动蜂鸣器
  8. 电路设计_CAN总线基础知识
  9. Nik Collection 3.3.0中文版 (摄影师必备ps滤镜插件套装)支持big surv
  10. 简单快速的UG编程入门操作