此处算是做一个笔记吧,我怕忘了。

对于List排序我们用的还是不少,我们平常都是用的Collections.sort()的方法,对于我们所需要排序的List内的对象是有要求的。那就是必须要实现Comparable这个接口,重写compare()这个方法。因此这种情况下我们一般会有两种方法来进行排序。我这儿用的是一个Student类,有String类型的name字段,int类型的year字段,String类型的day字段。这儿解释一下day字段,由于这儿的比较需要,我是用的“月-日”来表示的,此地需要才这样写,一般情况下不建议。

第一种方法:

Student类:

package com.uitrs.game.reg.common;/*** @author 作者 BealHe* @date 创建时间:2019年4月22日 下午2:44:06* @explain 类说明 :学生类*/
public class Student {/* 姓名 */private String name;/* 出生年 */private int year;/* 出生月-日(此地需要才这样写,一般情况下不建议) */private String day;public Student() {super();}public Student(String name, int year, String day) {super();this.name = name;this.year = year;this.day = day;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getYear() {return year;}public void setYear(int year) {this.year = year;}public String getDay() {return day;}public void setDay(String day) {this.day = day;}@Overridepublic String toString() {return "Student [name=" + name + ", year=" + year + ", day=" + day + "]";}
}

下面是主方法和排序方法:

public static void main(String[] args) throws Exception {List<Student> list = new ArrayList<>();Student s1 = new Student("张三", 1992, "2-5");list.add(s1);s1 = new Student("李四", 1992, "12-5");list.add(s1);s1 = new Student("王五", 1992, "2-20");list.add(s1);s1 = new Student("万一", 1992, "12-20");list.add(s1);s1 = new Student("开心", 1993, "3-12");list.add(s1);s1 = new Student("幸福", 1993, "3-5");list.add(s1);s1 = new Student("刘二", 1990, "2-5");list.add(s1);s1 = new Student("书桌", 1991, "2-5");list.add(s1);for (Student student : list) {System.out.println(student.toString());}System.out.println("----------------------分割线----------------------");sort(list);for (Student student : list) {System.out.println(student.toString());}}/*** 学生年龄大小比较,首先比较年份,其次比较月份和日期* * @param list*/private static void sort(List<Student> list) {Collections.sort(list, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {Integer year1 = o1.getYear();Integer year2 = o2.getYear();// 比较年份if (0 == year1.compareTo(year2)) {String[] arr1 = o1.getDay().split("-");String[] arr2 = o2.getDay().split("-");Integer month1 = Integer.parseInt(arr1[0]);Integer month2 = Integer.parseInt(arr2[0]);// 比较月份if (0 == month1.compareTo(month2)) {Integer day1 = Integer.parseInt(arr1[1]);Integer day2 = Integer.parseInt(arr2[1]);// 比较日期return day1.compareTo(day2);} else {return month1.compareTo(month2);}} else {return year1.compareTo(year2);}}});}

然后是排序前后输出结果对照:

Student [name=张三, year=1992, day=2-5]
Student [name=李四, year=1992, day=12-5]
Student [name=王五, year=1992, day=2-20]
Student [name=万一, year=1992, day=12-20]
Student [name=开心, year=1993, day=3-12]
Student [name=幸福, year=1993, day=3-5]
Student [name=刘二, year=1990, day=2-5]
Student [name=书桌, year=1991, day=2-5]
----------------------分割线----------------------
Student [name=刘二, year=1990, day=2-5]
Student [name=书桌, year=1991, day=2-5]
Student [name=张三, year=1992, day=2-5]
Student [name=王五, year=1992, day=2-20]
Student [name=李四, year=1992, day=12-5]
Student [name=万一, year=1992, day=12-20]
Student [name=幸福, year=1993, day=3-5]
Student [name=开心, year=1993, day=3-12]

上面就是第一种排序的方法,从结果可以看到,我们先以年为排序依据,其次再以月为依据,最后才以日为依据,排序结果没问题。接下来是第二种排序方法。

第二种方法:

实现Comparable的Student类:

package com.uitrs.game.reg.common;/*** @author 作者 BealHe* @date 创建时间:2019年4月22日 下午2:44:06* @explain 类说明 :学生类*/
public class Student implements Comparable<Student> {/* 姓名 */private String name;/* 出生年 */private int year;/* 出生月-日(此地需要才这样写,一般情况下不建议) */private String day;public Student() {super();}public Student(String name, int year, String day) {super();this.name = name;this.year = year;this.day = day;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getYear() {return year;}public void setYear(int year) {this.year = year;}public String getDay() {return day;}public void setDay(String day) {this.day = day;}@Overridepublic String toString() {return "Student [name=" + name + ", year=" + year + ", day=" + day + "]";}@Overridepublic int compareTo(Student o) {Integer year1 = this.getYear();Integer year2 = o.getYear();// 比较年份if (0 == year1.compareTo(year2)) {String[] arr1 = this.getDay().split("-");String[] arr2 = o.getDay().split("-");Integer month1 = Integer.parseInt(arr1[0]);Integer month2 = Integer.parseInt(arr2[0]);// 比较月份if (0 == month1.compareTo(month2)) {Integer day1 = Integer.parseInt(arr1[1]);Integer day2 = Integer.parseInt(arr2[1]);// 比较日期return day1.compareTo(day2);} else {return month1.compareTo(month2);}} else {return year1.compareTo(year2);}}
}

下面是排序主方法:

public static void main(String[] args) throws Exception {List<Student> list = new ArrayList<>();Student s1 = new Student("张三", 1992, "2-5");list.add(s1);s1 = new Student("李四", 1992, "12-5");list.add(s1);s1 = new Student("王五", 1992, "2-20");list.add(s1);s1 = new Student("万一", 1992, "12-20");list.add(s1);s1 = new Student("开心", 1993, "3-12");list.add(s1);s1 = new Student("幸福", 1993, "3-5");list.add(s1);s1 = new Student("刘二", 1990, "2-5");list.add(s1);s1 = new Student("书桌", 1991, "2-5");list.add(s1);for (Student student : list) {System.out.println(student.toString());}System.out.println("----------------------分割线----------------------");Collections.sort(list);for (Student student : list) {System.out.println(student.toString());}}

最后是排序前后输出结果对照:

Student [name=张三, year=1992, day=2-5]
Student [name=李四, year=1992, day=12-5]
Student [name=王五, year=1992, day=2-20]
Student [name=万一, year=1992, day=12-20]
Student [name=开心, year=1993, day=3-12]
Student [name=幸福, year=1993, day=3-5]
Student [name=刘二, year=1990, day=2-5]
Student [name=书桌, year=1991, day=2-5]
----------------------分割线----------------------
Student [name=刘二, year=1990, day=2-5]
Student [name=书桌, year=1991, day=2-5]
Student [name=张三, year=1992, day=2-5]
Student [name=王五, year=1992, day=2-20]
Student [name=李四, year=1992, day=12-5]
Student [name=万一, year=1992, day=12-20]
Student [name=幸福, year=1993, day=3-5]
Student [name=开心, year=1993, day=3-12]

上面就是第二种排序的方法,从结果可以看到,和第一次的排序结果一致。

这就是我的两种排序方法,实现方法不同,一个new的Comparator类,一个实现Comparable类并重写compareTo()方法。

Collections.sort()方法为List集合内对象进行排序相关推荐

  1. Java Collections.sort方法对list集合排序

    1.排序测试类 package com.ljq.test;import java.util.ArrayList; import java.util.Collections; import java.u ...

  2. javaScript中使用sort方法给数组和数组对象进行排序( 比值函数排序)

    //定义一个地址数组 var arr=['orange','apple','banana','litchi']; console.log(arr.sort()); 如果不给sort方法传递参数的话,输 ...

  3. Collections.sort()方法给集合排序

    Collections.sort()方法给集合排序 前言 因为Collections里面的sort()方法是静态方法,所以可以直接类名打点调用sort方法 Collections.sort()有两种参 ...

  4. Collections.sort()方法对象排序

    Collections.sort()方法可以对List对象进行排序,用户需要按特定属性进行排序,有两种实现方法: 1. public static <T extends Comparable&l ...

  5. 利用Collections.sort方法重写Comparator接口的compare方法对list集合排序

    Collections.sort()使用该方法实际是重写Comparator接口的compare方法实现排序://传入参数list集合,Comparator接口 T:list的元素类型 //如List ...

  6. Collections.sort方法对list排序的两种方式

    最近在工作中用到对地震等各种条件的排序,这里刚好用到了这个方法,我用的第二种方法   下面请参考 Collections.sort( )分为两部分,一部分为排序规则,一部分为排序算法 . 规则用来判断 ...

  7. 怎么Collections.sort()方法进行List排序

    一.Collections.sort()从小到大排序:Collections.sort(list); List<Integer> list = new ArrayList<Integ ...

  8. java arraylist comparable_Java 两种ArrayList集合自定义对象属性排序,Comparator接口 或 Comparable接口...

    1,Comparator接口 -- 重写Comparator public class User { private String id; private String name; public Us ...

  9. java 集合中对象的排序 和去重

    对list 集合对象中 重复度数据进行排序 1.实体类 中 实现 Comparable 接口中的compareTo 方法 用 什么来比较 集合中的排序 2.对集合中的的对象进行去重,重写 hashCo ...

最新文章

  1. [置顶] 如何搭建一个 Data Guard 环境
  2. android timer弹出窗口,android – 如何在服务类中的Timer内显示AlertDialog?
  3. Github上AI在银行和保险的应用列表
  4. 大脑构造图与功能解析_锻炼改变大脑
  5. Python中的元类(metaclass)
  6. IDA Pro 权威指南阅读摘要1
  7. Android音乐播放器高级开发
  8. OpenCV精进之路(二十一):实例——去除发票上的印章
  9. bzoj 3872 [ Poi 2014 ] Ant colony —— 二分
  10. Diagnostics: File file:/tmp/spark-***/__spark_libs__***.zip does not exist
  11. L1-033__040
  12. mysql all和distinct_mysql distinct 使用实例(过滤多余的重复记录)
  13. avast捆绑_如何摆脱Avast的通知,声音和捆绑软件
  14. dem数据(dem数据格式)
  15. C语言学习——编程软件安装和使用
  16. java多线程编程--模拟龟兔赛跑过程
  17. 【设计图交接与沟通的高效平台】上海道宁为设计师与开发者提供产品团队的互联空间——Zeplin
  18. wireshark-filter帮助手册
  19. 工作问题:SQL求解用户复购率
  20. 英语钻石法则(六)-----学习地道、实用的材料

热门文章

  1. 红米S2解BL锁教程申请BootLoader解锁教程
  2. 解析在线教育培训APP开发
  3. windows系统中安装monkey环境
  4. JS初中段考:袖珍西历
  5. JLINK烧写U-boot到NAND Flash中
  6. 雷神ZERO游戏本和ROG冰刃5Plus的 区别 选哪个
  7. 华为MA5626 ONU配置成交换机及开启POE指令教程
  8. oracle导入.dmp,oracle导入.dmp脚本
  9. 用Linux系统电脑越狱ipad3,图吧小白教程 篇一:电脑远程控制IPHONE(越狱)
  10. C#基于联通短信Sgip协议构建短信网关程序.net