Java重写compareTo方法的原理分析和具体实现

原理分析

当我们想排序一个自定义的数组,Java又没有直接提供它们的比较方式时。我们可以 通过实现接口Comparable并重写compareTo()方法来添加对自定义数组的比较,然后通过Arrays的sort()方法来将这个数组排序。这样就可以快速完成你所需要的排序了。有些同学就要问了:为什么重写了compareTo()方法就可以通过Arrays.sort()来进行排序了,我们可以通过源码来解释:

Java重写compareTo方法的原理分析和具体实现_第1张图片
Java重写compareTo方法的原理分析和具体实现_第2张图片
Java重写compareTo方法的原理分析和具体实现_第3张图片
我们从源码可以看到调用Arrays.sort()最后会通过Comparable接口的compareTo()对数组进行比较排序

具体实现

package com.example.demo;

import java.util.Arrays;

public class Coming {
    public static void main(String[] args){
        Student[] s=new Student[5];
        s[0]=new Student(0,"a",60);
        s[1]=new Student(1,"b",40);
        s[2]=new Student(2,"c",80);
        s[3]=new Student(3,"d",55);
        s[4]=new Student(4,"e",12);
        Arrays.sort(s);
        for (Student ss:s) {
            System.out.println(ss);
        }
    }
    public static class Student implements Comparable{
        private Integer id;
        private String name;
        private Integer grade;

        public Student(Integer id, String name, Integer grade) {
            this.id = id;
            this.name = name;
            this.grade = grade;
        }

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Integer getGrade() {
            return grade;
        }

        public void setGrade(Integer grade) {
            this.grade = grade;
        }

        @Override
        public String toString() {
            return "Student{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", grade=" + grade +
                    '}';
        }

        @Override
        public int compareTo(Student o) {
            return (this.getGrade()>o.getGrade())?1:-1;
        }
    }
}

最后的运行结果为:
Java重写compareTo方法的原理分析和具体实现_第4张图片

你可能感兴趣的:(Java核心)