在比较对象时,通常会得到除-1,0,1之外的整数。
e.g。 (在Java中)
Byte a = 10;
Byte b = 20;
System.out.println(a.compareTo(b)); // -10
在实践中是否有任何算法,数据结构利用了比较模型的这个属性?
或换句话说:为什么是任何数字> 1或者< -1是一个有用的信息?
编辑:对不起。我看到你怎么能把这个问题误解为Java问题。我的错。我将标签从“java”更改为“语言不可知”。
答案 0 :(得分:0)
Comparable
对象的约定指定compareTo()
返回的值为:
负整数,零或正整数,因为此对象小于,等于或大于指定对象。
上面的定义简化了比较,我们只需要使用通常的比较运算符测试返回值为零。例如,要检查对象a
是否大于或等于对象b
,我们可以写:
a.compareTo(b) >= 0
此外,这比仅返回-1
,1
或0
更灵活,因为它允许每个实现返回带有附加信息的值。例如,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
,而不是-1
,0
或{{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
,因此允许更广泛的返回值可以提供更清晰,更优化的代码。