了解 Java 中 compareTo() 方法的语法

Understanding syntax for compareTo() method in Java

我创建了一个 Student class,其中包含卷号、姓名和年龄作为其数据变量。我创建了一个 ArrayList 用于存储 class Student.

的多个对象

现在,我已经使用 Comparable 接口及其 compareTo 方法根据年龄对学生列表数据进行排序。

下面是我为年龄排序创建的 compareTo 方法:

    public int compareTo(Student sNew)
    {
        return this.age-sNew.age;
    }

这里,我看不懂,什么是-?以及它是如何工作的?

因为,我也做了如下:

public int compareTo(Student sNew)
    {
        int returnValue=0;
        if(this.age>sNew.age)
        {
            returnValue=1;
        }else if(this.age<sNew.age){
            returnValue=-1;
        }else if(this.age==sNew.age)
        {
            returnValue=0;
        }
        return returnValue;
    }

所以,我有两个疑问:“-”在 compareTo() 方法中的工作方式以及它 returns 值 (0,1,-1) 的位置。

请指导。

背后的想法是compareTo不是return0,1,-1,而是returns 0(等于),正数(大于)或负面(较小)。

因此,只需减去年龄即可得出正确答案

Comparable 接口是 Java 执行 three-way comparison 的方式。

理解 compareTo 语义的一个技巧是:a.compareTo(b) 等同于问题 a 与 b 相比如何? 可以只有三个答案(law of trichotomy):a 小于 bcompareTo() returns 小于零值), a 等于 bcompareTo returns 零值),并且 a 大于 bcompareTo returns 一个大于零的值)。

对于 total order 类型(整数、浮点数、日期等)的情况,操作 a - b 始终有效,因为:

  • 如果 a < b,操作 a - b 将始终产生小于零的值
  • 如果 a = b,操作 a - b 将始终产生零
  • 如果 a > b,操作 a - b 将始终产生大于零的值

在Java语法中,a是当前(this对象),所以语法是a.compareTo(b),但是思路是一样的。