了解 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 小于 b(compareTo()
returns 小于零值), a 等于 b(compareTo
returns 零值),并且 a 大于 b(compareTo
returns 一个大于零的值)。
对于 total order 类型(整数、浮点数、日期等)的情况,操作 a - b 始终有效,因为:
- 如果 a < b,操作 a - b 将始终产生小于零的值
- 如果 a = b,操作 a - b 将始终产生零
- 如果 a > b,操作 a - b 将始终产生大于零的值
在Java语法中,a是当前(this
对象),所以语法是a.compareTo(b)
,但是思路是一样的。
我创建了一个 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 小于 b(compareTo()
returns 小于零值), a 等于 b(compareTo
returns 零值),并且 a 大于 b(compareTo
returns 一个大于零的值)。
对于 total order 类型(整数、浮点数、日期等)的情况,操作 a - b 始终有效,因为:
- 如果 a < b,操作 a - b 将始终产生小于零的值
- 如果 a = b,操作 a - b 将始终产生零
- 如果 a > b,操作 a - b 将始终产生大于零的值
在Java语法中,a是当前(this
对象),所以语法是a.compareTo(b)
,但是思路是一样的。