Collectins工具类如下提供排序方法:

public static <T extends Comparable<? super T>> void sort(List<T> list) {list.sort(null);
}public static <T> void sort(List<T> list, Comparator<? super T> c) {list.sort(c);
}
复制代码
  • 使用方法一时对象T必需实现Comparable接口否则编译不通过,排序时使用Comparable的compareTo(T o)进行元素大小比较;

  • 方法二需要显式指定比较器(实现了Comparator接口),排序时使用指定比较器的compare(T o1, T o2)方法进行元素大小比较;

自定义对象排序的例子

public class ObjectSort {public static void main(String[] args) {List<Student> students = new ArrayList<>();students.add(new Student("0022", "zhangsan"));students.add(new Student("0001", "lisi"));students.add(new Student("0012", "xiaozhang"));students.add(new Student("0002", "xiaozhao"));Collections.sort(students);for (Student s : students) {System.out.println(s.getNo() + "," + s.getName());}}
}class StudentComparator implements Comparator<Student> {@Overridepublic int compare(Student o1, Student o2) {Integer no1 = Integer.valueOf(o1.getNo());Integer no2 = Integer.valueOf(o2.getNo());return no1 > no2 ? 1 : (no1.equals(no2)) ? 0 : -1;}
}class Student implements Comparable<Student> {private String no;private String name;public String getNo() {return no;}public void setNo(String no) {this.no = no;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Student(String no, String name) {this.no = no;this.name = name;}@Overridepublic int compareTo(Student o) {return new StudentComparator().compare(this, o);}
}
复制代码

根据运行结果可以发现,默认是按照升序进行排序的。而在实际应用中经常是按照倒序排序,该如何解决呢?

  • 调用Collections.reverse(List<?> list)方法将升序排序结果进行倒转,但效率不高;

  • 修改StudentComparator类的compare方法,代码如下:

class StudentComparator implements Comparator<Student> {@Overridepublic int compare(Student o1, Student o2) {Integer no1 = Integer.valueOf(o1.getNo());Integer no2 = Integer.valueOf(o2.getNo());// 取反return -(no1 > no2 ? 1 : (no1.equals(no2)) ? 0 : -1);}
}
复制代码

总结

1、推荐使用显式指定比较器方法,Comparable的compare方法已实现或防止compare方法被修改的可能;

2、Collectins工具类的sort方法的过程是首先将List转换成数组,然后选择排序方法对数组进行排序。

Java基础系列—List排序相关推荐

  1. 夯实Java基础系列19:一文搞懂Java集合类框架,以及常见面试题

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  2. 夯实Java基础系列17:一文搞懂Java多线程使用方式、实现原理以及常见面试题

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  3. string substring的用法_夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战...

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  4. 基础的java增删改查,Java基础系列(基础):Java使用Cookie增删改查操作!

    什么是Cookie? Cookie是由W3C组织提出,最早由NetScape社区发展的一种机制. Cookie是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个co ...

  5. java中this_夯实Java基础系列7:一文读懂Java 代码块和执行顺序

    目录 #java中的构造方法 #构造方法简介 #构造方法实例 #例-1 #例-2 #java中的几种构造方法详解 #普通构造方法 #默认构造方法 #重载构造方法 #java子类构造方法调用父类构造方法 ...

  6. [转载] 夯实Java基础系列8:深入理解Java内部类及其实现原理

    参考链接: Java内部类 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tut ...

  7. java基础系列十七(时间日期转换)

    目录 一.概述 二.基础知识 2.1 时区 2.2 格林威治时间 2.3 时间戳 三.Date/Calendar/SimpleDateFormat 3.1 Date 3.2 Calendar 3.3 ...

  8. 知其然,知其所以然之Java基础系列(一)

    相信大家在最初接触Java基础学习的时候,也只是跟着课本上的描述学习,知其然,不知所以然,要想成为一个Java老鸟,不仅要学会怎么用,也要知道为何这么用.在Java基础系列的博客中,我会列举一系列大家 ...

  9. 夯实Java基础系列9:深入理解Class类和Object类

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

最新文章

  1. iOS 自定义转场动画初探
  2. Unity3D在iOS下为啥不能更新的资料收集
  3. golang 简单web服务
  4. View Controller Programming Guide for iOS---(七)---Resizing the View Controller’s Views
  5. 阿里巴巴王坚:用数据来改变世界
  6. 太阳能电池板正负极图_太阳能LED路灯故障原因有哪些?
  7. 解决百度 ueditor v1.4.3 编辑器上传图片失真的bug?
  8. Entity Framework 实体框架的形成之旅--实体框架的开发的几个经验总结
  9. Hierarchical clustering
  10. 跨过Nginx上基于uWSGI部署Django项目的坑
  11. 项目管理工具与技术---项目风险管理中的工具与技术
  12. 值得推荐的Vue 移动端UI框架
  13. OpenGL 饱和度调节
  14. PyCharm:ModuleNotFoundError:No module named 'selenium' 解决方法
  15. laravel 常用文档
  16. 记录,在公网云服务器,装入redis服务后,未设置密码直接被pnscan病毒攻击,变成wakuang机器。
  17. 中止执行后超过2年_超过两年是否可以申请强制执行
  18. 静下心来看一看花花世界花花人.
  19. 抖音账号主页设置推荐机制
  20. HDU (多校) Kejin Player HDU 6656

热门文章

  1. 《趣学JavaScript——教孩子学编程》——1.5 本章小结
  2. 《Splunk智能运维实战》——第1章 游戏时间——导入数据 1.1 简介
  3. CCNA12月12日战报
  4. SQL优化--使用关联查询代替子查询
  5. 流行的 NPM 包依赖关系中存在远程代码执行缺陷
  6. Apache Commons Collections反序列化漏洞分析与复现
  7. 聚焦BCS|吴云坤产业峰会演讲:用内生安全框架提升网络安全产值
  8. C语言char的大小写转换
  9. Alluxio在多级分布式缓存系统中的应用
  10. AR VR或将彻底变革广告营销行业