Comparable 中 compareTo()是怎么实现排序的

public class PersonTest implements Comparable{

    private String name;
    private int age;

    public PersonTest(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public int compareTo(Object o) {
        if (o instanceof PersonTest){
            PersonTest o1 = (PersonTest) o;
            return Double.compare(this.age,o1.age);

        }
        throw new RuntimeException("传入数据类型不匹配");
    }

    @Override
    public String toString() {
        return "PersonTest{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public static void main(String[] args) {

        PersonTest[] arr = new PersonTest[5];
        arr [0] = new PersonTest("ak1", 20);
        arr [1] = new PersonTest("ak2", 23);
        arr [2] = new PersonTest("ak3", 14);
        arr [3] = new PersonTest("ak4", 51);
        arr [4] = new PersonTest("ak5", 32);

        System.out.println(Arrays.toString(arr));

        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}

 

运行结果:

为什么compareTo()返回了1,0,-1就能实现对象排序的功能

看这里面的代码Arrays.sort(arr),这个方法是真正执行排序的。也可以看这篇博客 https://blog.csdn.net/github_38838414/article/details/80642329

@Override
public int compareTo(Object o) {
    if (o instanceof PersonTest){
        PersonTest o1 = (PersonTest) o;
        //return this.age - o1.age; //此处返回的是一个int数据类型
        //或者使用以下方式, 对比的是int类型 而不是double类型
        return Integer.compare(this.age,o1.age); 
        //以上两种方式都可以实现排序对比
    }
    throw new RuntimeException("传入数据类型不匹配");
}

 

您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您可以仔细阅读看是否解决了您的问题。

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~