表达对象与整数关系的目的是什么?

时间:2016-11-20 18:23:41

标签: algorithm sorting data-structures language-agnostic comparison

在比较对象时,通常会得到除-1,0,1之外的整数。

e.g。 (在Java中)

Byte a = 10;
Byte b = 20;
System.out.println(a.compareTo(b)); // -10

在实践中是否有任何算法,数据结构利用了比较模型的这个属性?

  

或换句话说:为什么是任何数字> 1或者< -1是一个有用的信息?

编辑:对不起。我看到你怎么能把这个问题误解为Java问题。我的错。我将标签从“java”更改为“语言不可知”。

2 个答案:

答案 0 :(得分:0)

Comparable对象的约定指定compareTo()返回的值为:

  

负整数,零或正整数,因为此对象小于,等于或大于指定对象。

上面的定义简化了比较,我们只需要使用通常的比较运算符测试返回值为零。例如,要检查对象a是否大于或等于对象b,我们可以写:

a.compareTo(b) >= 0

此外,这比仅返回-110更灵活,因为它允许每个实现返回带有附加信息的值。例如,String' compareTo()返回:

  

两个字符串中位置k的两个字符值的差异 - 即值:

this.charAt(k) - anotherString.charAt(k)
  

如果没有它们不同的索引位置,那么较短的字符串按字典顺序排在较长的字符串之前。在这种情况下,compareTo返回字符串长度的差异 - 即值:

this.length() - anotherString.length()

答案 1 :(得分:0)

没有算法会利用这个"属性",因为你不能依赖于返回的确切值。

唯一的保证是<0=0>0,因为这是Comparable.compareTo()定义的合同:

  

返回负整数,零或正整数,因为此对象小于,等于或大于指定对象。

Byte实施不再具体:

  

如果此Byte等于参数Byte,则返回值0 ; 小于0的值如果此字节在数值上小于参数Byte;如果此字节在数值上大于参数字节(带符号的比较),则大于0的值

任何其他内容都是任意的,如有更改,恕不另行通知。

为了澄清,返回的值定义为<0=0>0,而不是-10或{{1}作为实现的便利,而不是作为向调用者提供附加信息的手段。

例如,实现Byte.compareTo(Byte anotherByte)以使用以下简单代码返回介于-255和255之间的数字:

+1

替代方案将是代码:

return this.value - anotherByte.value;

由于调用者可以轻松测试返回值return this.value < anotherByte.value ? -1 : this.value > anotherByte.value ? 1 : 0; 而不是x < 0,因此允许更广泛的返回值可以提供更清晰,更优化的代码。