我正在寻找一种比Arrays.sort()
更好的算法。我知道这看起来像是一个被问了无数次的愚蠢问题,但请继续阅读。
假设有两个实现了Comparable
接口的类,它们的自然排序基于一个整数值。第一个compareTo
方法如下:
public int compareTo(ComparableInteger o) {
return this.value - o.value;
}
第二点是这样的:
public int compareTo(ComparableInteger o) {
if (this.value > o.value) {
return 1;
} else {
if (this.value == o.value) {
return 0;
} else {
return -1;
}
}
}
当我对这些类的实例列表调用
Collections.sort
时,它们的性能大致相同。我的问题是是否存在一种排序算法,可以从第一个
compareTo
方法的附加信息中受益。在第一个示例中,添加的信息是这样的:
让我们有三个
ComparableInteger
的值:a == 1
b == 2
c == 3
现在当我们比较
c
和a
时,得到的是2,而当我们比较c
和b
时,得到的是1。从compareTo
的实现可以看出,b
应该在a
之后,因为c.compareTo(a) > c.compareTo(b)
,所以我们知道正确的顺序。现有的Comparable
协议不要求这样做,并需要进行另一个比较。例如,以下实现也符合(至少我希望如此)协议,但给出了不同的结果(数字排序,但偶数在奇数之前)。public int compareTo(ComparableInteger o) {
if (value % 2 == o.value % 2){
return value - o.value;
} else {
if (value % 2 == 1){
return 1;
}else{
return -1;
}
}
}
- 我很清楚第一个例子不可靠,因为int可能会溢出。