JAVAEE第八章 集合的排序规则Sort实现原理

一、集合的排序规则

  • 概述: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方法提供了两种实现排序规则,

  1. 通过实现java.lang.Comparable接口,重写里面的compareTo方法
  2. 通过实现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:
  1. 定义在类里面,
  2. 通过调用Collections.sort(集合对象)的方式调用
  3. 我们必须在此集合类里面实现Comparable接口才可以,不然会报错.
  • Comparator:
  1. 可以定义在对象里面
  2. 通过Collections.sort(集合对象,new Comparator<>{重写compare方法})

最后总结

Collections.sort提供了集合的排序方法,Collections.sort有两个参数不同的实现方法

  1. Collections.sort(集合对象) :通过在类里面实现Comparable接口中的compareTo方法.
  2. Collections.sort(集合对象, new Comparator <T>{重写compare方法}):通过实现compare接口.
发布了40 篇原创文章 · 获赞 4 · 访问量 6332

猜你喜欢

转载自blog.csdn.net/oFlying1/article/details/104533706