参考链接:

HOW2J.CN

前言

对于JAVA集合,都能够用集合的工具类Collections 提供的方法:

  1. Collections.sort(List list)
  2. Collections.sort(List list, Comparator c)

来进行排序。很多时候,集合中存储的不是基本的数据类型,而是我们自己定义的类的对象,我们希望用自己的排序方式对集合中的元素进行排序,我们可以通过让类实现Comparable接口来自定义排序方式,也可以采用创建匿名内部类的做法进行自定义排序

实现Comparable接口

  1. 让待排序的类继承Comparable接口,并实现compareTo方法(相当于给类提供了排序依据)

    package blog;
    
    /*
    * Student 类
    */
    public class Student implements Comparable<Student>{
    private String name;
    private int id;
    public Student(String name, int id) {
    this.name = name;
    this.id = id;
    }
    @Override
    public String toString() {
    return "Student [name=" + name + ", id=" + id + "]";
    }
    //实现对象比较的方法(id从小到大排序)
    @Override
    public int compareTo(Student o) {
    if(id < o.id)
    return -1;
    else
    return 1;
    }
    }
  2. 直接使用Collections.sort(List list)进行排序

    package blog;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List; public class Main {
    public static void main(String[] args) {
    List<Student> students = new ArrayList<Student>();
    students.add(new Student("xsy", 2));
    students.add(new Student("theory", 1));
    students.add(new Student("衍射",3)); //排序前
    System.out.println("排序前:");
    for(Student student : students) {
    System.out.println(student);
    } //排序后(按照id从小到大)
    Collections.sort(students);
    System.out.println("排序后:");
    for(Student student : students) {
    System.out.println(student);
    }
    }
    }

    排序前:

    Student [name=xsy, id=2]

    Student [name=theory, id=1]

    Student [name=衍射, id=3]

    排序后:

    Student [name=theory, id=1]

    Student [name=xsy, id=2]

    Student [name=衍射, id=3]

JAVA创建匿名内部类

类不需要继承接口,只需要在排序时重写Comparator的compare方法:

package blog;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; public class Main {
public static void main(String[] args) {
List<Student> students = new ArrayList<Student>();
students.add(new Student("xsy", 2));
students.add(new Student("theory", 1));
students.add(new Student("衍射",3)); //排序前
System.out.println("排序前:");
for(Student student : students) {
System.out.println(student);
} //排序后(按照id从小到大)-- 重写Comparator的compare方法
Collections.sort(students, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof Student && o2 instanceof Student) {
Student s1 = (Student)o1;
Student s2 = (Student)o2;
return s1.getId()-s2.getId();
}
return 0;
}
});
System.out.println("排序后:");
for(Student student : students) {
System.out.println(student);
}
}
}

运行结果如下:

排序前:

Student [name=xsy, id=2]

Student [name=theory, id=1]

Student [name=衍射, id=3]

排序后:

Student [name=theory, id=1]

Student [name=xsy, id=2]

Student [name=衍射, id=3]

最新文章

  1. [deviceone开发]-心形点赞动画示例
  2. QtCreator下运行opencv出现realloc():pointer invalid
  3. 2012年湖南省程序设计竞赛E题 最短的名字
  4. C#中的五个访问修饰符
  5. XMLHttpRequest 对象
  6. Eclipse使用代码清理功能(Clean Up)
  7. 如何把rtf、doc文件转换为HTML文件
  8. Visual StudioTools for Unity 使用技巧2
  9. C++ 静态、动态链接库的简单实现
  10. MIME协议
  11. js格式转换
  12. Lua学习(5)——迭代器与泛型for
  13. C#实现SQLSERVER数据库中有序GUID生成(NewSequentialId)
  14. Call From master/192.168.128.135 to master:8485 failed on connection exception: java.net.ConnectException: Connection refused
  15. Google Guava
  16. Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: &#39;L
  17. 在linux系统中出现u盘问题 的相关解决方法
  18. 18.17 U-Boot+内核移植
  19. 从身份证号码中获取性别、出生日期、籍贯,并更新mongodb
  20. python property的用法

热门文章

  1. 手把手教你使用Python抓取QQ音乐数据(第一弹)
  2. 使用itext asian 解决中文不显示的问题
  3. 微信小程序预览Word文档
  4. mac Pycharm 导入jieba报错解决
  5. 【MonogDB帮助类】
  6. SpringBoot--使用Mybatis分页插件
  7. java重试
  8. Spring Boot入门系列(十七)整合Mybatis,创建自定义mapper 实现多表关联查询!
  9. mat-paginatoor控件
  10. wsl环境下配置ubuntu16.04