jav*_*nix 8 java compareto comparable
在实现compareTo()时,是否需要考虑"差异"的程度?
例如,如果我有3个对象,C1,C2和C3,那么C1 <C2 <C3.
C1.compareTo(C2)应该返回一个小于C2.compareTo(C3)的整数吗?
Comparable接口的文档似乎没有指定这种或那种方式,所以我猜测程度并不重要,但是知道返回特定数字是否有一些优势会很好(例如,改进TreeSet排序速度或其他东西).
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html#compareTo(T)
有趣的问题,但尽管如此,根据和规范, 的大小int没有意义,只有符号。可以想象,某些排序算法可以另外指定它们可以从大小中获取“提示”,但我不确定这对于基于比较的排序有多实用,因为我们实际上只需要知道是否、或(这实际上是和是OOP 的抽象)。Comparable<T>Comparator<T>a < ba == ba > bComparableComparator
现在需要说的是,这里可能有一个隐藏的意图,即使用减法习惯用法来比较数值,即如下所示:
public int compare(T t1, T t2) {
return t1.intField - t2.intField;
}
Run Code Online (Sandbox Code Playgroud)
请注意,此比较方法可能会被破坏,因为当两个数字之间的差异大于 时可能会溢出Integer.MAX_VALUE。事实上,这是Java Puzzlers中涵盖的谜题之一。
为了进行演示,请考虑以下片段(摘自书中):
int x = -2000000000;
int z = 2000000000;
System.out.println(x - z); // prints a positive number due to overflow
Run Code Online (Sandbox Code Playgroud)
显然x < z, 然而x - z是一个正数。请注意使用这种减法习惯用法:进行显式比较 and return -1、0、 or1总是更安全。
| 归档时间: |
|
| 查看次数: |
298 次 |
| 最近记录: |