gpt4 book ai didi

java - 在 Comparable 类中实现 compareTo 时,特定的有符号整数是否重要?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:51:02 25 4
gpt4 key购买 nike

在实现compareTo()时,需要考虑“差异”的程度吗?

例如,如果我有 3 个对象,C1、C2 和 C3,则 C1 < C2 < C3。

C1.compareTo(C2) 应该返回一个小于 C2.compareTo(C3) 的整数吗?

Comparable 接口(interface)的文档似乎没有指定一种或另一种方式,所以我猜度数无关紧要,但很高兴知道返回特定数字是否有一些优势(对于例如,提高 TreeSet 排序速度之类的)。

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html#compareTo(T)

最佳答案

有趣的问题,但仍然不是,int 的大小根据 Comparable<T> 没有意义和 Comparator<T>规范,只有标志。可以想象一些排序算法可以额外指定它们可以从幅度中获取“提示”,但我不确定这对于基于比较的排序有多实用,因为我们真的只需要知道是否 a < b , a == b , 或 a > b (这实际上是 ComparableComparator 的 OOP 抽象)。


现在需要说的是,这里可能有一个隐藏的意图,即使用减法习语来比较数值,即像这样:

public int compare(T t1, T t2) {
return t1.intField - t2.intField;
}

请注意,由于当两个数字之间的差异大于 Integer.MAX_VALUE 时可能会发生溢出,因此这种比较方法可能会被破坏。 .事实上,这是 Java Puzzlers 中涵盖的谜题之一。 .

为了演示,考虑以下片段(摘自书中):

int x = -2000000000;
int z = 2000000000;
System.out.println(x - z); // prints a positive number due to overflow

很明显x < z , 然而x - z是正数。小心使用这个减法惯用语:明确比较和 return -1 总是更安全, 0 , 或 1相反。

关于java - 在 Comparable <Type> 类中实现 compareTo 时,特定的有符号整数是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2633794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com