Comparable.compareTo的返回值在Java中是什么意思?
Java中返回Comparable.compareTo的返回值在Java中是什么意思?,java,comparable,Java,Comparable,Java中返回0、返回1和返回-1之间有什么区别?官方定义 从以下参考文件: 将此对象与 为订单指定的对象。返回一个 负整数、零或正整数 整数,因为此对象小于, 等于或大于 指定的对象 实施者必须确保 sgn(x.与(y)相比)== -所有x和y的sgn(y.compareTo(x))。(这意味着x.compareTo(y)必须 当y.compareTo(x)时引发异常 抛出异常。) 实施者还必须确保 关系是可传递的: (x.compareTo(y)>0和&y.compareTo(z)>0) 表
0
、返回1
和返回-1
之间有什么区别?官方定义
从以下参考文件:
将此对象与
为订单指定的对象。返回一个
负整数、零或正整数
整数,因为此对象小于,
等于或大于
指定的对象
实施者必须确保
sgn(x.与(y)相比)==
-所有x和y的sgn(y.compareTo(x))。(这意味着x.compareTo(y)必须
当y.compareTo(x)时引发异常
抛出异常。)
实施者还必须确保
关系是可传递的:
(x.compareTo(y)>0和&y.compareTo(z)>0)
表示x.compareTo(z)>0
最后,实现者必须确保
x.compareTo(y)==0意味着
sgn(x.compareTo(z))==
sgn(y.compareTo(z)),适用于所有z
强烈推荐,但不推荐
严格要求
(x.与(y)==0)==(x.等于(y))。
一般来说,任何
实现可比较的接口
而且违反这个条件应该
明确指出这一事实。这个
建议使用的语言为“注意:此
类具有一种自然顺序,即
与平等不一致。”
在前面的描述中
符号sgn(表达式)指定
数学符号函数,
定义为返回-1中的一个,
根据值是否为0或1
表达式的值为负、零或
肯定的
我的版本
简言之:
this.compareTo(that)
返回
- 负整数如果这
- 0如果这个==那个
- 一个正整数如果这个>那个
和=
的实际语义(我不是指java的对象标识操作符意义上的=
)
例子
将产生小于0的值,因为abc
按字母顺序在def
之前
Integer.valueOf(2).compareTo(Integer.valueOf(1))
将产生大于0的值,因为2大于1
其他一些要点
注意:对于实现Comparable的类来说,在javadocs中声明其compareTo()方法的语义是一种很好的做法
注意:您应至少阅读以下内容之一:
- 部分 Sun Java中的收集线索 辅导
- 借 Joshua Bloch,特别是第12项: 考虑实施类似的
- 借 莫里斯·纳夫塔林,菲利普·瓦德勒,第3.1章:可比
警告:您决不能依赖compareTo的返回值为
-1
、0
和1
。您应该始终分别测试x<0
、x==0
、x>0
。它可以用于排序,0表示“相等”,而-1表示“更少”和“更多(更大)”
任何小于0的返回值都表示左操作数较小,如果该值大于0,则左操作数较大。我使用此助记符:
a.compareTo(b) < 0 // a < b
a.compareTo(b) > 0 // a > b
a.compareTo(b) == 0 // a == b
a.与(b)相比<0//a0//a>b
a、 比较(b)==0//a==b
您保留符号,并始终将
compareTo()
的结果与0进行比较,例如,如果我们要比较“a”和“b”,即(“a”==此)
compareTo()
方法返回具有以下特征的int:
- 如果此对象<其他对象
- 如果此对象==另一个对象
- 如果此对象>其他对象,则为正
- 1。比较(0)(返回:1)
- 1。比较(1)(返回:0)
- 0.comapreTo(1)(返回:-1)
- 简单回答:(搜索您的情况)
如果A>B的值将返回“是”或“否”。compareTo也可以返回-2或42。请尝试一下Javadoc。如果你记忆有困难,(像我一样),我只是将其想象为一个数字减法运算
A-B
如果A
更大,则结果为正(+1),否则,如果b
越大,结果就是负的……如果它们等于0
则是负的、正的和0,而不仅仅是-1、1和0,还有-1、0和1。是的,当一些比较器只返回其中一个值时,另一个可以返回任何值,其中负表示左操作数更小,零表示两个操作数相等,正表示左操作数更大。在Java之外,这就像C works中的strcmp()
。记住,在文档中,他们谈论的是sgn()
,而不是直接的-1和1。你应该把这个加到你的短版本里。我知道。我更喜欢真实的语言而不是数学上的庞然大物(我很高兴你不能否决评论:-),所以我分别写了-1(或更小)和1(或更大)。有趣的是,官方文件没有说负整数实际上意味着这个<那个。他们只是说有三个不同的返回值:负整数、零和正整数。其中一个表示thisa.compareTo(b) < 0 // a < b
a.compareTo(b) > 0 // a > b
a.compareTo(b) == 0 // a == b
int x = thisObject.compareTo(anotherObject);