Comparable.compareTo的返回值在Java中意味着什么?

问题描述 投票:60回答:6

在Java中0中返回1,返回-1和返回compareTo()有什么区别?

java comparable
6个回答
82
投票

官方定义

来自Comparable.compareTo(T)的参考文档:

将此对象与指定的对象进行比较以获得顺序。返回负整数,零或正整数,因为此对象小于,等于或大于指定对象。

实现者必须确保所有x和y的sgn(x.compareTo(y))== -sgn(y.compareTo(x))。 (这意味着如果y.compareTo(x)抛出异常,x.compareTo(y)必须抛出异常。)

实现者还必须确保关系是传递的:(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")

因为abcdef之前按字母顺序排列,所以会产生小于0的东西。

Integer.valueOf(2).compareTo(Integer.valueOf(1))

将产生大于0的东西,因为2大于1。

一些额外的要点

注意:对于实现Comparable的类来说,优雅的做法是在javadocs中声明它的compareTo()方法的语义。

注意:您应该至少阅读以下内容之一:

警告:你永远不应该依赖compareTo的返回值为-101。你应该总是分别测试x < 0x == 0x > 0


44
投票

我用这个助记符:

a.compareTo(b) < 0 // a < b

a.compareTo(b) > 0 // a > b

a.compareTo(b) == 0 // a == b

你保留标志,并始终将compareTo()的结果与0进行比较


21
投票

简而言之:(搜索你的情况)

  • 1.compareTo(0)(返回:1)
  • 1.compareTo(1)(返回:0)
  • 0.comapreTo(1)(返回:-1)

5
投票

例如,如果我们想比较“a”和“b”,即(“a”== this)

  1. 如果a <b,则为负int
  2. 如果a == b
  3. 如果a> b,则为正int

3
投票

它可以用于排序,0表示“相等”而-1表示,1表示“更少”和“更多(更大)”。

任何小于0的返回值意味着左操作数较小,如果值大于0则左操作数更大。


2
投票
int x = thisObject.compareTo(anotherObject);

compareTo()方法返回一个具有以下特征的int:

  • 负面的If thisObject < anotherObject
  • If thisObject == anotherObject
  • 积极的If thisObject > anotherObject
© www.soinside.com 2019 - 2024. All rights reserved.