在java中,Comparable.compareTo的返回值是什么意思?
在java中的compareTo()返回0,返回1和返回-1是什么区别?..
正式定义
从Comparable.compareTo(T)的参考文档:
将此对象与指定的对象进行比较以进行sorting。 返回负整数,零或正整数,因为此对象小于,等于或大于指定的对象。
对于所有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))。
强烈build议,但不是严格要求(x.compareTo(y)== 0)==(x.equals(y))。 一般来说,任何实现了Comparable接口的类违反了这个条件都应该清楚地说明这个事实。 推荐的语言是“注意:这个类有一个自然的sorting,与平等不一致”。
在前面的描述中,符号sgn(expression式)表示math符号函数,其被定义为根据expression式的值是否为零,或者是正值来返回-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的类来说,在javadoc中声明它的compareTo()方法的语义是一个很好的习惯。
注意:您应该至less阅读以下内容之一:
- Sun Java教程中Collection Trace的Object Ordering部分
- Joshua Bloch的有效Java ,特别是第12项: 考虑实现Comparable
- Javagenerics和collections Maurice Naftalin,Philip Wadler,3.1章: Comparable
警告:你不应该依赖于compareTo的返回值是-1
和1
。 您应该总是分别testingx < 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比较
回答总之:(search你的情况)
- 1 .compareTo( 0 )( return : 1 )
- 1 .compareTo( 1 )( return : 0 )
- 0 .comapreTo( 1 )( return : -1 )
举例来说,如果我们想比较“a”和“b”,即(“a”== this)
- 如果a <b,则返回int
- 如果a == b
- 正整数如果a> b
它可以用于sorting,0表示“相等”而-1,而1表示“更less”和“更多(更大)”。
任何小于0的返回值意味着左操作数越小,如果数值大于0,则左操作数越大。
int x = thisObject.compareTo(anotherObject);
compareTo()
方法返回一个具有以下特征的int:
- negative
If thisObject < anotherObject
- 零
If thisObject == anotherObject
- positive
If thisObject > anotherObject