首先讲一下Comparable接口和Comparator接口,以及他们之间的差异。有助于Collections.sort()方法的使用。请参考

1.Comparable自然规则排序
//在自定义类Student里面实现Comparable接口,并重写抽象方法compareTo(Student o);
//Collections.sort(集合);

先看一个简单的例子:

    public static void main(String[] args) {  List<Integer> nums = new ArrayList<Integer>();  nums.add(3);  nums.add(5);  nums.add(1);  nums.add(0);  System.out.println(nums);  Collections.sort(nums);  System.out.println(nums);  }  

输出结果:
[3, 5, 1, 0]
[0, 1, 3, 5]

稍微复杂的List里面放一个复杂的对象

package core.java.collection.collections;  public class User implements Comparable<User>{  private int score;  private int age;  public User(int score, int age){  super();  this.score = score;  this.age = age;  }  public int getScore() {  return score;  }  public void setScore(int score) {  this.score = score;  }  public int getAge() {  return age;  }  public void setAge(int age) {  this.age = age;  }  @Override  public int compareTo(User o) {  int i = this.getAge() - o.getAge();//先按照年龄排序  if(i == 0){  return this.score - o.getScore();//如果年龄相等了再用分数进行排序  }  return i;  }  }  public static void main(String[] args) {  List<User> users = new ArrayList<User>();  users.add(new User(78, 26));  users.add(new User(67, 23));  users.add(new User(34, 56));  users.add(new User(55, 23));  Collections.sort(users);  for(User user : users){  System.out.println(user.getScore() + "," + user.getAge());  }
} 

输出结果:
55,23
67,23
78,26
34,56

我们会发现sort(List<T>)方法中List中的T必须实现Comparable<T>接口,然后实现compareTo()方法,该方法的返回值0代表相等,正数表示大于,负数表示小于;为什么在简单例子中没有看到实现Comparable接口呢?是因为Integer类其实自己已经实现了Comparable接口,Java已经给我们做好了。

2.Comparator专门规则排序(l临时排序)
//新建一个实现了Comparator接口的类,并重写抽象方法compare(Student o1, Student o2);
//Collections.sort(集合,实现了Comparator接口的类的实例化对象);

Collections提供的第二种排序方法sort(List<T> list, Comparator<? super T> c)
先看例子:

package core.java.collection.collections;  public class Students {  private int age;  private int score;  public Students(int age, int score){  super();  this.age = age;  this.score = score;  }  public int getAge() {  return age;  }  public void setAge(int age) {  this.age = age;  }  public int getScore() {  return score;  }  public void setScore(int score) {  this.score = score;  }
}
public static void main(String[] args) {  List<Students> students = new ArrayList<Students>();  students.add(new Students(23, 100));  students.add(new Students(27, 98));  students.add(new Students(29, 99));  students.add(new Students(29, 98));  students.add(new Students(22, 89));  Collections.sort(students, new Comparator<Students>() {  @Override  public int compare(Students o1, Students o2) {  int i = o1.getScore() - o2.getScore();  if(i == 0){  return o1.getAge() - o2.getAge();  }  return i;  }  });  for(Students stu : students){  System.out.println("score:" + stu.getScore() + ":age" + stu.getAge());  }
}

输出结果:
score:89:age22
score:98:age27
score:98:age29
score:99:age29
score:100:age23

从上面的例子我们可以看出Students类没有实现Comparable<T>接口,只是在sort()方法中多传入一个参数,只不过该参数是一个接口我们需要实现其compare方法。

List集合序列排序的两种方法相关推荐

  1. python列表的排序方法_pythonlist排序的两种方法及实例

    本文主要介绍了python list排序的两种方法及实例讲解.具有很好的参考价值,下面一起来看下吧 对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排 ...

  2. 计算机word降序排列怎么做,word中怎么进行排序的两种方法

    word文档中表格除了作为我们的编辑和展示功能之外,还可以进行排序功能,十分方便,那么下面就由学习啦小编给大家分享下word中进行排序的技巧,希望能帮助到您. word中进行排序方法一: 步骤一:将光 ...

  3. python list列表排序的两种方法及实例讲解

    对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排序 list.sort(func=None, key=None, reverse=False) Py ...

  4. list排序方法python_python list 排序的两种方法及实例讲解

    对 list 进行排序,Python 提供了两个方法: 方法1. 用 list 的内建函数 list.sort 进行排序 list.sort(func=None, key=None, reverse= ...

  5. python list排序的两种方法及实例讲解

    对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排序 list.sort(func=None, key=None, reverse=False) Py ...

  6. python列表排序方法-python list排序的两种方法及实例讲解

    对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排序 list.sort(func=None, key=None, reverse=False) Py ...

  7. java中集合的排序_Java中集合排序的两种方法

    import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.u ...

  8. Java中对List集合排序的两种方法

    第一种方法,就是list中对象实现Comparable接口,代码如下: public class Person implements Comparable<Person> {private ...

  9. java集合进行排序的两种方式

    java集合的工具类Collections中提供了两种排序的方法,分别是: Collections.sort(List list) Collections.sort(List list,Compara ...

  10. C++中sort函数从大到小排序的两种方法

    1.sort函数描述 而且,sort函数的算法效率相当于快排,使用sort函数有时候可能比我们自己写一个排序算法,可能效率更高. 2.使用sort函数排序 #include <iostream& ...

最新文章

  1. PHP sprintf() 函数
  2. ASP.NET操作文件大全
  3. 以太坊知识教程------智能合约(2)调用
  4. 大剑无锋之面试问到了Kafka???【面试推荐】
  5. 转载:售前十年,你在第几年
  6. android 好玩的ui,让安卓更好玩 这些Launchers值得拥有
  7. Linux C高级编程——网络编程之UDP(4)
  8. 不同图像锐化算子提取的图像信息有哪些不同_传统图像处理
  9. California Fault Lines: Understanding the Causes and Impact of Network Failures
  10. Linux TTY/PTS概述
  11. Python新闻网站项目-8.Django前端Web部署
  12. STM32+DWM1000开发uwb测距系列教程之三:使用官方例程实现p2p双向 twr测距
  13. 计算机指纹驱动程序,解决Windows 7系统本本指纹识别器问题
  14. Java-万元与元之间的换算
  15. 跨域 SameSite secure
  16. 用python对我和女票的聊天记录生成心形词云
  17. 国际象棋渲染测试软件,测试了五款软件八款游戏:AMD三代锐龙YES!但游戏英特尔略胜一筹...
  18. 利用Hexo GitHub Page和 travis CI搭建播客
  19. 让复杂Json数据和对象自由转换 --- Gson
  20. sodo与visodo的日常使用

热门文章

  1. LibreOJ #10003加工生产调度(Johnson算法求解最短时间)
  2. awz3格式转epub格式转mobi格式
  3. 串口屏还是并口屏好用?
  4. 简单的商品信息管理系统(Java 和sql server数据库)源码
  5. android 安装p12证书,如何在Android中使用p12证书(客户端证书)
  6. C# 节约里程法实现
  7. C语言文件IO实现图书馆管理系统,登录、注册、借书、还书和新增书籍
  8. gitlab自定义头像设置
  9. itest听力答案2020_itest大学英语测试答案2019
  10. 第1章 SAAS-HRM系统概述与搭建环境