Comparable.compareTo的返回值在Java中意味着什么?
在Java中的compareTo()
中返回0
,返回1
和返回-1
什么区别?
官方定义
来自Comparable.compareTo(T)的参考文档:
将此对象与指定的对象进行比较以获得顺序。 返回负整数,零或正整数,因为此对象小于,等于或大于指定对象。
实现者必须确保所有x和y的sgn(x.compareTo(y))== -sgn(y.compareTo(x))。 (这意味着如果y.compareTo(x)抛出exception,x.compareTo(y)必须抛出exception。)
实现者还必须确保关系是传递的:(x.compareTo(y)> 0 && y.compareTo(z)> 0)意味着x.compareTo(z)> 0。
最后,对于所有z,实现者必须确保x.compareTo(y)== 0意味着sgn(x.compareTo(z))== sgn(y.compareTo(z))。
强烈建议,但并非严格要求(x.compareTo(y)== 0)==(x.equals(y))。 一般来说,任何实现Comparable接口并且违反此条件的类都应该清楚地表明这一事实。 推荐的语言是“注意:此类具有与equals不一致的自然顺序。”
在前面的描述中,符号sgn(表达式)指定数学符号函数,其被定义为根据表达式的值是负,零还是正来返回-1,0或1中的一个。
我的版本
简而言之:
this.compareTo(that)
回报
- 一个负的int,如果这个<那个
- 0如果= =那
- 一个积极的int,如果这>那个
其中此方法的实现确定了<
>
和==
的实际语义(我不是指java的对象标识运算符意义上的==
)
例子
"abc".compareTo("def")
将产生小于0的东西,因为abc
在def
之前按字母顺序排列。
Integer.valueOf(2).compareTo(Integer.valueOf(1))
将产生大于0的东西,因为2大于1。
一些额外的要点
注意:对于实现Comparable的类来说,优雅的做法是在javadocs中声明它的compareTo()方法的语义。
注意:您应该至少阅读以下内容之一:
- Sun Java教程中Collection Trail的Object Ordering部分
- Joshua Bloch的有效Java ,特别是第12项: 考虑实现Comparable
- 由Maurice Naftalin撰写的Java Generics and Collections ,Philip Wadler,第3.1章: 可比较
警告:你永远不应该依赖compareTo的返回值为-1
和1
。 您应该始终分别测试x < 0
, x == 0
, x > 0
。
我用这个助记符:
a.compareTo(b) < 0 // a < b a.compareTo(b) > 0 // a > b a.compareTo(b) == 0 // a == b
保留符号并始终将compareTo()
的结果与0进行比较
简而言之:(搜索你的情况)
- 1 .compareTo( 0 )( 返回 : 1 )
- 1 .compareTo( 1 )( 返回 : 0 )
- 0 .comapreTo( 1 )( 返回 : -1 )
举个例子,如果我们想比较“a”和“b”,即(“a”== this)
- 如果a
- 如果a == b
- 如果a> b,则为正int
它可以用于排序,0表示“相等”而-1表示,1表示“更少”和“更多(更大)”。
任何小于0的返回值意味着左操作数较小,如果值大于0则左操作数更大。
int x = thisObject.compareTo(anotherObject);
compareTo()
方法返回一个具有以下特征的int:
-
If thisObject < anotherObject
- 零
If thisObject == anotherObject
- positive
If thisObject > anotherObject
- 使用Java EE 6 Beanvalidation
- 如何使“MessageDigest SHA-1和Signature NONEwithRSA”等同于“Signature SHA1withRSA”
- FileFilter for JFileChooser
- Spring Data:服务层unit testing
- Spring Security登录返回404
- 在Java中生成JAXB类时添加toString,hashCode,equals
- java.lang.IllegalArgumentException:protocol = http host = null
- 如何遵守得墨忒耳的法律?
- java.lang.IllegalArgumentException:向容器添加窗口