可比较和比较

在实现依赖于 doublecompareTo(..) 方法时,请不要执行以下操作:

public int comareTo(MyClass other) {
    return (int)(doubleField - other.doubleField); //THIS IS BAD
}

(int) 强制转换引起的截断将导致该方法有时错误地返回 0 而不是正数或负数,因此可能导致比较和排序错误。

相反,最简单的正确实现是使用 Double.compare ,如下:

public int comareTo(MyClass other) {
    return Double.compare(doubleField,other.doubleField); //THIS IS GOOD
} 

自 Java 1.2 以来Comparable<T> 的非通用版本,简称 Comparable 。除了与遗留代码接口之外,实现通用版本 Comparable<T> 总是更好,因为它不需要在比较时进行转换。

一个类与其自身相当是非常标准的,如:

public class A implements Comparable<A>

虽然有可能打破这种范式,但在这样做时要谨慎。

如果该类实现了 Comparable<T>,那么仍然可以在类的实例上使用 Comparator<T>。在这种情况下,将使用 Comparator 的逻辑; Comparable 实现指定的自然顺序将被忽略。