Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Comparable.compareTo的返回值在Java中是什么意思?_Java_Comparable - Fatal编程技术网

Comparable.compareTo的返回值在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) 表

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) 表示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”==此)

  • 如果a
  • 如果a==b
  • 如果a>b,则为正整数
  • compareTo()
    方法返回具有以下特征的int:

    • 如果此对象<其他对象
    • 如果此对象==另一个对象
    • 如果此对象>其他对象,则为正
      • 简单回答:(搜索您的情况)

        • 1。比较(0)(返回:1
        • 1。比较(1)(返回:0
        • 0.comapreTo(1)(返回:-1
        系统输出打印LN(A.与(B)>0比较?“是”:“否”)


        如果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(或更大)。有趣的是,官方文件没有说负整数实际上意味着这个<那个。他们只是说有三个不同的返回值:负整数、零和正整数。其中一个表示thisthat,另一个表示this==that。也就是说,文档在任何时候都没有具体说明——事实上,你可以说,作者试图围绕这个细节进行写作,并让它保持开放状态。@O.R.Mapper我不同意。当此对象小于、等于或大于指定对象时,返回一个负整数、零或正整数。“当此对象是”部分将整数映射到关系。@kojow我没有遇到过这样的实现,但是:“返回一个负整数。”
        a.compareTo(b) < 0 // a < b
        
        a.compareTo(b) > 0 // a > b
        
        a.compareTo(b) == 0 // a == b
        
        int x = thisObject.compareTo(anotherObject);