List集合排序主要涉及到两个接口Comparable接口和Comparator接口以及一个方法Collections.sort()的使用

首先是Comparable接口的自然排序

先来看一个例子:

public static void main(String[] args) {// TODO Auto-generated method stubArrayList<Integer> list=new ArrayList<>();list.add(123);list.add(155);list.add(35);list.add(90);System.out.println(list);Collections.sort(list);System.out.println(list);}

输出结果:

这个自然排序就是从小到大顺序排列,包括数字顺序,字母顺序等;

再看list集合加入相对复杂的对象排序

public class Employee implements Comparable<Employee>{private String name;private int age;private double salary;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}public Employee(String name, int age, double salary) {super();this.name = name;this.age = age;this.salary = salary;}@Overridepublic String toString() {return "Employee [name=" + name + ", age=" + age + ", salary=" + salary + "]\n";}@Overridepublic int compareTo(Employee o) {if (salary==o.getSalary()) { //当salary相等时,比较ageif (age==o.getAge()) {  //age相等时,比较姓名//String类中自己重写了compareTo()方法,调用即可return name.compareTo(o.getName()); }else {return o.getAge()-age;} }else {//salary不相等,返回值从小到大排列 return (int) (o.getSalary()-salary);}}}
public static void main(String[] args) {// TODO Auto-generated method stubArrayList<Employee> list =new ArrayList<Employee>();list.add(new Employee("张三",21 , 58.0));list.add(new Employee("张三",21 , 58.0));list.add(new Employee("李四",31 , 88.0));list.add(new Employee("王五",11 , 28.0));list.add(new Employee("赵六",11 , 28.0));list.add(new Employee("赵六",18 , 58.0));Collections.sort(list); //调用sort方法System.out.println(list);
}

输出结果:

在这里我们会发现必须要实现 Comparable接口并且重写compareTo()方法,在compareTo()方法中写自定义的排序规则,总结一条返回值负数都表示小于,正数都表示大于,0表示等于,同时,在遇到字符串时,String类中本身就重写了compareTo()方法,调用即可,同时这个排序因为是运用list集合不会去除重复项用Collections.sort(list);调用比较方法;

Comparator配合set集合使用

set集合使用相对于list,最大的不同就是可以去重,接下来看一个案例

// Employee对象中写法不变public static void main(String[] args) {// TODO Auto-generated method stubArrayList<Employee> list =new ArrayList<Employee>();list.add(new Employee("张三",21 , 58.0));list.add(new Employee("张三",21 , 58.0));list.add(new Employee("李四",31 , 88.0));list.add(new Employee("王五",11 , 28.0));list.add(new Employee("赵六",11 , 28.0));list.add(new Employee("赵六",18 , 58.0));System.out.println("=======================================");TreeSet<Employee> treeSet=new TreeSet<>();treeSet.addAll(list);for(Employee e:treeSet) {System.out.println(e);}}

输出结果为:

set集合使用Comparable接口规则和list没有什么不同,注意两点即可,1,set会自己调用compareTo()方法,而list需要Collections.sort(list);调用比较方法。2,set会去除重复项。

Comparator的临时排序

来看一个例子。

public static void main(String[] args) {// TODO Auto-generated method stubArrayList<Employee> list =new ArrayList<Employee>();list.add(new Employee("张三",21 , 58.0));list.add(new Employee("张三",21 , 58.0));list.add(new Employee("李四",31 , 88.0));list.add(new Employee("王五",11 , 28.0));list.add(new Employee("赵六",11 , 28.0));list.add(new Employee("赵六",18 , 58.0));Collections.sort(list,new Comparator<Employee>() {@Overridepublic int compare(Employee o1, Employee o2) {if (o1.getSalary()==o1.getSalary()) {if (o1.getAge()==o2.getAge()) {return o2.getName().compareTo(o1.getName());}else {return o2.getAge()-o1.getAge();}}else {return (int) (o2.getSalary()-o1.getSalary());}}});System.out.println(list);

输出结果:

这个在调用Collections.sort()方法时实现Comparator接口,并且重写compare()方法,compare方法中的比较排序规则与前面相同。

笔者作为一个新人,翻看和欣赏了大神的笔记后,自己总结加工,发表一下自己浅薄的见解,如果哪里说得不对,希望读者能提出批评和指正,本人表示诚心的感谢。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  10. python 快速排序_python-快速排序的两种方法

    代码环境:python3.6 递归实现 步骤: 从序列中挑出任意一个元素为pivot,此处选择序列最后一个元素,如果更改,需要相应变更以下步骤内容: 设置两个指针left和right,指向序列的最左和 ...

最新文章

  1. 堪称下一场工业革命 一张图看懂物联网
  2. [tool] AI视频翻译 解决英文视频字幕问题(类似youtube自动生成字幕)
  3. 两个ListBox的相互操作
  4. android端 socket长连接 架构
  5. 三维重建:SLAM的粒度和工程化问题
  6. python变量的作用域及生命周期_Python——变量的作用域
  7. Spring Cloud Stream与RabbitMQ整合
  8. win10安装vbox没有虚拟网卡_消失的虚拟网卡
  9. atom配置python环境_用Python制作网站Django实操与开发环境配置
  10. leetcode 1037. 有效的回旋镖(Valid Boomerang)
  11. Session 工作原理
  12. 人工智能对智能建筑有哪些影响,智能建筑发展存在哪些问题?
  13. Python Web开发技巧III
  14. 2021年盐城高考成绩查询系统,2021年盐城工学院录取结果查询,附查询网址入口
  15. nacos-server1.4.1linux和windows版本下载
  16. [机器学习-5]岭回归及python实现(Ridge Regression)
  17. AMBA总线协议的学习-AHB,ASB,APB三种总线以及AXI接口
  18. 微信小程序进度条组件自定义数字_微信小程序之圆形进度条(自定义组件)
  19. 【社区图书馆】30+危机,最值得读烂的5本书|必读
  20. Spring Cloud(15)——配置中心

热门文章

  1. 视频文件损坏怎么修复,赤兔视频修复软件助您
  2. mi5x的Android的版本,小米5XMIUI11最新稳定版刷机包(最新系统完整固件升级吧安卓8.0)...
  3. 周立功CAN通讯(txt格式) 报文解析
  4. y480 linux无线网卡驱动,联想y480无线网卡驱动下载-联想y480笔记本网卡驱动v15.0.0.75 官方版 - 极光下载站...
  5. 【微信篇】微信自动登录设置
  6. Highcharts 将默认文字更改为中文
  7. 莫烦python 强化学习 (Reinforcement Learning)
  8. 微信支付一面(C++后台)
  9. 国民体质测定标准计算机应用软件,体测标准计算器
  10. 计算机专业英语常用术语大全,计算机专业必备英语词汇汇总