我有以下程序
import java.util.*;
public class Test {
public static void main(String[] args) {
Integer[] array = { 3, 1, 4, 1, 5, 9 };
Arrays.sort(array, new Comparator<Integer>() {
public int compare(Integer i1, Integer i2) {
return i1 < i2 ? -1 : (i2 > i1 ? 1 : 0);
}
});
System.out.println(Arrays.toString(array));
}
}
这给了我输出[3,1,4,1,5,9]。为什么呢?
答案 0 :(得分:6)
因为i1 < i2
与i2 > i1
相同 - 请查看您在compareTo方法中所写的内容。
答案 1 :(得分:3)
i1 < i2
i2 > i1
这些都是一样的。
答案 2 :(得分:1)
你测试i1&lt; i2,如果失败,则为i1&gt;测试NOT i2,但对于i2&gt; I1。
将比较器更改为
return i1 < i2 ? -1 : (i1 > i2) ? 1 : 0;
ADDED
为了尝试为另外两个答案提供新的东西,这些答案说的是同样的事情,并且打败了我,大多数的包装类都内置了compareTo()方法来避免任何想法。例如,你的比较器可以只调用Integer.compareTo(),即
return i1.compareTo(i2);