一、集合的排序规则
- 概述:Collections是集合类的工具类,用来对集合进行操作,其中包括排序的操作.
- public static boolean addAll(Collection c, T… elements) :往集合中添加一些元素。
- public static void shuffle(List<?> list) 打乱顺序:打乱集合顺序。
- public static void sort(List list):将集合中元素按照默认规则排序。
- public static void sort(List list,Comparator<? super T> ):将集合中元素按照指定规则排序。
二、集合Sort排序的原理与实现
2.1 先看一个简单的代码
//String和Integer的默认排序为升序
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
Collections.addAll(list,10,30,20);
Collections.sort(list);//调用Collections的默认排序规则
System.out.println(list);//排序后的结果 10,20,30
}
2.2 JAVA排序原理
JAVA的Collections的sort方法提供了两种实现排序规则,
- 通过实现java.lang.Comparable接口,重写里面的compareTo方法
- 通过实现java.util.Comparator接口,重写compare方法
上述String和Integer能够排序,是因为实现了各自实现了java.lang.Comparable接口.
2.3 通过java.lang.Comparable接口实现排序
//实现Comparable方法并重写compareTo方法
public class Student implements Comparable<Student>{
private String name;
private int age;
//set/get和构造方法省略
//复写compareTo方法
@Override
public int compareTo(Student o) {
return this.getAge()-o.getAge();//升序
// return o.getAge()-this.getAge();//降序
}
测试类
public static void main(String[] args) {
ArrayList<Student> students = new ArrayList<>();
Collections.addAll(students,new Student("张三",10),new Student("李四",30),new Student("王五",20));
//实现方法
Collections.sort(students);
System.out.println(students);//按照Age排序输出
}
2.4 通过java.util.Comparator接口实现排序
public class Student2 implements Comparator<Student2> {
private String name;
private int age;
//set/get和构造方法省略
}
测试代码
public static void main(String[] args) {
ArrayList<Student2> students = new ArrayList<>();
Collections.addAll(students,new Student2("张三",10),new Student2("李四",30),new Student2("王五",20));
//实现方法
Collections.sort(students, new Comparator<Student2>() {
@Override
public int compare(Student2 o1, Student2 o2) {
return o1.getAge()-o2.getAge();//升序
//return o2.getAge()-o1.getAge();//降序
}
});
System.out.println(students);
}
2.5 简述Comparable和Comparator两个接口的区别
- Comparable:
- 定义在类里面,
- 通过调用
Collections.sort(集合对象)的方式调用
- 我们必须在此集合类里面实现Comparable接口才可以,不然会报错.
- Comparator:
- 可以定义在对象里面
- 通过Collections.sort(集合对象,new Comparator<>{重写compare方法})
最后总结
Collections.sort提供了集合的排序方法,Collections.sort有两个参数不同的实现方法
Collections.sort(集合对象)
:通过在类里面实现Comparable接口中的compareTo方法.Collections.sort(集合对象, new Comparator <T>{重写compare方法})
:通过实现compare接口.