Java中的Collections.sort

  • 0.码仙励志
  • 1.普通数字排序
  • 2.对象单字段排序
  • 3.对象多字段排序

0.码仙励志

时间是治疗心灵创伤的大师,但绝不是解决问题的高手。

1.普通数字排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class ListSortTest {public static void main(String[] args) {List<Integer> list = new ArrayList<Integer>();list.add(3);list.add(2);list.add(2);list.add(4);list.add(1);System.out.println(list);// 从小到大排序Collections.sort(list);System.out.println(list);// 倒序Collections.reverse(list);System.out.println(list);}
}

运行结果:

[3, 2, 2, 4, 1]
[1, 2, 2, 3, 4]
[4, 3, 2, 2, 1]

2.对象单字段排序

先创建一个对象Student,我们用age来排序

public class Student {private String name;private int age;private int height;public Student(String name, int age, int height) {super();this.name = name;this.age = age;this.height = height;}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 int getHeight() {return height;}public void setHeight(int height) {this.height = height;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", height=" + height + "]";}}

开始排序:
这里说一下重写的 public int compareTo(Student o){} 这个方法,它返回三种 int 类型的值:负整数,零 ,正整数。

  1. 负整数:当前对象的值 < 比较对象的值 , 位置排在前。
  2. 零:当前对象的值 = 比较对象的值 , 位置不变。
  3. 正整数:当前对象的值 > 比较对象的值 , 位置排在后。

让Student实现 Comparable 接口,然后重写里面的
compareTo()方法。

public class Student implements Comparable<Student> {private String name;private int age;private int height;public Student(String name, int age, int height) {super();this.name = name;this.age = age;this.height = height;}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 int getHeight() {return height;}public void setHeight(int height) {this.height = height;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", height=" + height + "]";}@Overridepublic int compareTo(Student o) {// 从大到小// return o.age - this.age;// 从小到大return this.age - o.age;}}

测试一下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class ListSortTest {public static void main(String[] args) {List<Student> list = new ArrayList<Student>();list.add(new Student("喜羊羊", 25, 175));list.add(new Student("美羊羊", 18, 165));list.add(new Student("懒羊羊", 23, 170));list.add(new Student("沸羊羊", 23, 175));list.add(new Student("慢羊羊", 80, 169));System.out.println("默认:");for (Student student : list) {System.out.println(student);}System.out.println("排序:");Collections.sort(list);for (Student student : list) {System.out.println(student);}System.out.println("倒序:");Collections.reverse(list);for (Student student : list) {System.out.println(student);}}
}

运行结果:

默认:
Student [name=喜羊羊, age=25, height=175]
Student [name=美羊羊, age=18, height=165]
Student [name=懒羊羊, age=23, height=170]
Student [name=沸羊羊, age=23, height=175]
Student [name=慢羊羊, age=80, height=169]
排序:
Student [name=美羊羊, age=18, height=165]
Student [name=懒羊羊, age=23, height=170]
Student [name=沸羊羊, age=23, height=175]
Student [name=喜羊羊, age=25, height=175]
Student [name=慢羊羊, age=80, height=169]
倒序:
Student [name=慢羊羊, age=80, height=169]
Student [name=喜羊羊, age=25, height=175]
Student [name=沸羊羊, age=23, height=175]
Student [name=懒羊羊, age=23, height=170]
Student [name=美羊羊, age=18, height=165]

3.对象多字段排序

接下来根据age和height排序
把Student的compareTo重写一下

public class Student implements Comparable<Student> {private String name;private int age;private int height;public Student(String name, int age, int height) {super();this.name = name;this.age = age;this.height = height;}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 int getHeight() {return height;}public void setHeight(int height) {this.height = height;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", height=" + height + "]";}@Overridepublic int compareTo(Student o) {// 从大到小if (o.age == this.age) {return o.height - this.height;}return o.age - this.age;}}

ListSortTest不用变
运行结果:

默认:
Student [name=喜羊羊, age=25, height=175]
Student [name=美羊羊, age=18, height=165]
Student [name=懒羊羊, age=23, height=170]
Student [name=沸羊羊, age=23, height=175]
Student [name=慢羊羊, age=80, height=169]
排序:
Student [name=慢羊羊, age=80, height=169]
Student [name=喜羊羊, age=25, height=175]
Student [name=沸羊羊, age=23, height=175]
Student [name=懒羊羊, age=23, height=170]
Student [name=美羊羊, age=18, height=165]
倒序:
Student [name=美羊羊, age=18, height=165]
Student [name=懒羊羊, age=23, height=170]
Student [name=沸羊羊, age=23, height=175]
Student [name=喜羊羊, age=25, height=175]
Student [name=慢羊羊, age=80, height=169]

Java中的Collections.sort()相关推荐

  1. Java中的Collections类– java.util.Collections

    Collections class in java is a useful utility class to work with collections in java. The java.util. ...

  2. Java中关于Arrays.sort的两种重载方法的理解

    前言 在java中重载排序方法的方法目前有两种,一种是实现Comparable接口的compareTo方法,还有一种是用比较器(comparator) 作为参数,其中比较器是实现了Comparator ...

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

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

  4. java中的Arrays.sort()的几种用法

    目录 1.第一种 2.第二种方法 3.第三种方法 4.额外补充 for each的语法结构 直奔主题 Arrays.sort()有三种用法 1.第一种 Arrays.sort(int [] a) 查看 ...

  5. java中关于Arrays.sort()方法的使用

    通过Arrays类事物静态sort()方法可以实现对数组的排序.sort方法提供了多种重载方式,可以对任意类型的数组进行升序排序. 方法摘要: Type Method Description stat ...

  6. Java中的Arrays.sort(int[])

    Arrays.sort(int[]) Arrays.sort(int[])使用的是quicksort+merge sort. 使用quicksort:当数组长度比较小(right-left<28 ...

  7. java arrays.sort() c_5.4 (Java学习笔记)集合的排序(Collections.sort(),及Arrays.sort())...

    1.Comparable接口 这个接口顾名思义就是用于排序的,如果要对某些对象进行排序,那么该对象所在的类必须实现 Comparabld接口.Comparable接口只有一个方法CompareTo() ...

  8. Java异常:IllegalArgumentException Collections.sort报错

    异常 java.lang.IllegalArgumentException: Comparison method violates its general contract! at java.util ...

  9. java arrays.sort() c_正面刚算法-Java中Arrays.sort()(一)

    最近一直在看关于排序相关的算法,从O(n²)的冒泡.插入.选择到O(nlog(n))的归并.快排.再到桶排序.计数排序.基数排序.各个算法都有自己的优点和缺点,那么jdk中关于这种底层的算法是怎么实现 ...

  10. 简单介绍Java中Comparable和Comparator

    转载自 简单介绍Java中Comparable和Comparator Comparable 和 Comparator是Java核心API提供的两个接口,从它们的名字中,我们大致可以猜到它们用来做对象之 ...

最新文章

  1. 一起谈.NET技术,C#中int和System.Int32理解总结
  2. linux分区合并不损坏系统,一次Linux磁盘损坏导致系统不可用恢复实例
  3. Vim编程之:tags,cscope,taglist
  4. [知识图谱构建] 二.《Neo4j基础入门》基础学习之创建图数据库节点及关系
  5. OpenGL之渲染大小球自转和公转的效果
  6. UrlRewrite(URL重写)--ASP.NET中的实现
  7. Linux Shell脚本入门教程系列之(十四) Shell Select教程
  8. [COURSE_PTHE] 18. 缓冲区溢出
  9. vue2.x-cnode(vue全家桶)
  10. java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/Str
  11. 理解storm的ACKER机制原理
  12. Java中如何判断两个对象是否相等(Java equals and ==)
  13. Linux的百度云有限速吗,mac(linux)下配置aria2解决百度云限速问题
  14. 新浪20年:独行侠的影响力之路
  15. Hive报错Error during job, obtaining debugging information...
  16. 815 - Flooded!
  17. DSS 代码分析【启动、初始化流程】
  18. C++流式输入输出加速 给 cin/cout 装个小火箭
  19. opencv_模板匹配
  20. 【数据结构】递归斐波那契数列的时间复杂度、空间复杂度

热门文章

  1. 如何学好高中数学 提高高中数学成绩秒杀技巧(这几点很重要)
  2. Palantir的研究到金融风控(二)
  3. 银行卡号- 查询银行卡信息
  4. 虚拟摄像头/无人直播效果分析,可替抖音/微信
  5. Python第五周作业之选择题
  6. 计算机关机界面卡住,电脑关机时卡在关机界面的解决方法
  7. html播放器怎么删除,风行如何完全删除?风行播放器彻底删除图文教程汇总
  8. JavaFX+Kotlin游戏从入门到放弃:拯救蛇蛇大作战又名454行实现几何数独游戏
  9. 下面程序段中带下划线的语句的执行次数的数量级是( )
  10. 网络教育本科统考计算机和英语作文,远程教育本科统考英语真题及答案