大半夜,一同学来问这段代码.问了三个问题.

一,这个排序Sort()怎么用? 

二,接口作为方法的参数是什么意思?

三,入参直接new Comparator(){}是怎么回事?

先回答第二,三个问题:

二,接口入参,意思就是:你需要传入一个实现了该接口的对象.

三,入参直接new Comparator(){};这是个匿名内部类(不知道的去问度娘),这个有什么用?没啥用!这跟你去新建个类,实现Comparator接口的compare方法,然后再new 对象放到参数里的效果是一样的.匿名内部类的用途就是可以偷懒(简洁),少敲代码.不需要再去单独建个类,再new对象.而是直接new接口.直接实现了.代码如下:

Collections.sort(list, new Comparator<User>() {@Overridepublic int compare(User o1, User o2) {//o1-o2降序(顺序),反之o2-o1则升序(反序).int ageC = o1.getAge() - o2.getAge();if (ageC == 0) {return o1.getName().compareTo(o2.getName());} else {return ageC;} }});

如果你使用1.8以上的jdk,匿名内部类还可以这样写.用lambda表达式.这写法有什么用?更简洁了,就是又少写了一些代码.代码如下:

//去掉User也可以 Collections.sort(list, (o1, o2) ->{Collections.sort(list, (User o1, User o2) -> {            //o1-o2降序(顺序),反之o2-o1则升序(反序).int ageC = o1.getAge() - o2.getAge();if (ageC == 0) {return o1.getName().compareTo(o2.getName());} else {return ageC;}});

最后说下Collections.sort()两种用法.这是JDK java.util包自带的排序方法.这两个方法都是调用Arrays.sort(), 最终排序算法是legacyMergeSort()_归并排序或 TimSort.sort()_结合了合并排序(merge sort)和插入排序(insertion sort)而得出的排序算法

  //第一种方法   public static <T> void sort(List<T> list, Comparator<? super T> c) {        list.sort(c);    }  //第二种方法    public static <T extends Comparable<? super T>> void sort(List<T> list) {        list.sort(null);    }

第一种,入参是一个list,及Comparator () ,这个一个接口,接口可以用普通类实现后new对象入参,也可以用匿名内部类入参.

第二种,入参只有一个list,不过对list的泛型T做了限制,T或T的父类必须实现Comparable接口的compareTo方法.这个方法跟compare方法排序效果是一样的. 下面上demo.

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;public class TestSort {public static void main(String[] args) {List<User> list = new ArrayList();list.add(new User(10, "test1"));list.add(new User(11, "test2"));list.add(new User(8, "test3"));//第一种用法1Collections.sort(list, new Comparator<User>() {@Overridepublic int compare(User o1, User o2) {//o1-o2降序(顺序),反之o2-o1则升序(反序).int ageC = o1.getAge() - o2.getAge();if (ageC == 0) {//String类重写了compareTo方法return o1.getName().compareTo(o2.getName());} else {return ageC;}}});System.out.println(list.toString());//第一种用法2//jdk1.8lambda表达式写法Collections.sort(list, (User o1, User o2) -> {//o1-o2降序(顺序),反之o2-o1则升序(反序).int ageC = o1.getAge() - o2.getAge();if (ageC == 0) {return o1.getName().compareTo(o2.getName());} else {return ageC;}});List<UserC> list2 = new ArrayList();list2.add(new UserC(10, "test1"));list2.add(new UserC(11, "test2"));list2.add(new UserC(9, "test3"));//第二种用法Collections.sort(list2);System.out.println(list2.toString());}//静态内部类,方便写demo,不然还得多建几个类static class User {int age;String name;public User(int age, String name) {this.age = age;this.name = name;}@Overridepublic String toString() {return "User{" + "age=" + age + ", name='" + name + '\'' + '}';}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}}//静态内部类,方便写demo,不然还得多建几个类,实现了Comparable接口,泛型匹配UserCstatic class UserC implements Comparable<UserC> {int age;String name;public UserC() {}public UserC(int age, String name) {this.age = age;this.name = name;}@Overridepublic String toString() {return "User{" + "age=" + age + ", name='" + name + '\'' + '}';}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic int compareTo(UserC o) {//o1-o2降序(顺序),反之o2-o1则升序(反序).int age = this.age - o.getAge();if (age == 0) {//String类重写了compareTo方法return this.name.compareTo(o.getName());}return age;}}
}

#欢迎关注-- ☆帮助各位同学辅导java相关问题☆.

集合排序 Collections.sort用法相关推荐

  1. JAVA-List排序-Collections.sort()-对象数组(集合)根据某一属性排序

    JAVA-List排序-Collections.sort() 当我们想对一个对象数组(集合)根据某一属性进行排序时,我们可以使用list中的Collection.sort(),这是一种较快捷的方式. ...

  2. java的sort的用法_Java排序方法sort用法详解

    Java排序方法sort用法详解 发布于 2020-2-28| 复制链接 摘记: 本文实例为大家分享了java对数组.集合的排序方法,供大家参考,具体内容如下对数组的排序: ```java //对数组 ...

  3. JAVA对list集合进行排序Collections.sort()

    对一个集合中的对象进行排序,根据对象的某个指标的大小进行升序或降序排序.代码如下: // 进行降序排列Collections.sort(list, new Comparator<ResultTy ...

  4. java sort方法_Java排序方法sort用法详解

    本文实例为大家分享了java对数组.集合的排序方法,供大家参考,具体内容如下 对数组的排序: //对数组排序 public void arraySort(){ int[] arr = {1,4,6,3 ...

  5. java 集合排序方法_java集合排序方法sort的使用

    转自  http://blog.csdn.net/a1165117473/article/details/6965652 /* * To change this template, choose To ...

  6. ht-8 对arrayList中的自定义对象排序( Collections.sort(ListT list, Comparator? super T c))...

    1 package com.iotek.set; 2 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import ja ...

  7. java List 排序 Collections.sort() 对 List 排序

    2019独角兽企业重金招聘Python工程师标准>>> //一个POJO例子 class User {  String name;  String age;    public Us ...

  8. list排序(Collections.sort())

    Collections.sort(userList, new Comparator<User>() {@Overridepublic int compare(User o1,User o2 ...

  9. 深入分析集合List的排序Collections.sort

    List接口本身未提供sort的方法. 在jdk中提供了一个集合操作工具类Collections来操作集合. 查看Collections类,可以发下如下两个方法: static <T exten ...

最新文章

  1. 父子对等组之间的关系
  2. 17 PP配置-生产计划-总体维护工厂参数
  3. (转)C++类所占内存大小计算
  4. Kafka集群中 topic数据的分区 迁移到其他broker
  5. 车型代号对照表_车型代号对照表 2016最新版
  6. win10pe系统计算机名修改,pe 重置win10登陆密码怎么操作_如何用pe系统重置win10电脑密码-win7之家...
  7. 前端jq实现视频跟图片一起混播
  8. 本科生计算机论文中文核心,本科生可以发表核心期刊论文吗
  9. 小学信息技术信息与计算机课件,小学信息技术ppt课件
  10. 信用社考试计算机试题及答案,2016黑龙江省农村信用社考试题库-计算机试题及答案六...
  11. java bks证书_如何创建包含客户端证书链的BKS(BouncyCastle)格式的Java密钥库
  12. ISO工具集合,好用推荐,喜欢就下载使用
  13. Revit导出PDF格式图纸流程及“批量导出图纸”
  14. 情态动词+have+done用法整理
  15. 如何使用计算机网络打印机,电脑重新连接网络打印机的操作方法-电脑自学网...
  16. Mac快捷键大全及cheatsheet插件
  17. 前端自学路线 更新11.11
  18. 小米4s刷 android7,小米 MI 4S(小米4S 全网通 安卓7.0)获取Root权限服务含精简系统方案...
  19. 谐振电路的品质因数(Q值)
  20. 图像处理职位面试题汇总(1)

热门文章

  1. 50定焦镜头,看看你的单反相机是否需要它
  2. 游戏开发设计模式之状态模式 有限状态机 c#委托事件(unity3d 示例实现)
  3. 计算机网络基础动画_北大考研辅导班-2021北京大学622计算机应用基础考研经验真题参考...
  4. ​龙迅股份在科创板上市:募资约11亿元,赛富、深创投为股东​
  5. 搭乘社交电商“快车”平江特产“走四方”9个月狂卖300万
  6. 逗号运算符的简单分析和用法
  7. vue与单页面 使用Photo Sphere Viewer创建vr 360全景示例代码
  8. Cocos2D-X系列之RPG横版过关游戏完整版实例-2
  9. Tortoies清除SVN访问历史记录
  10. labview运行excel宏_【2017年整理】LabVIEW中Excel报告生成功能开发.pdf