使用比较器的意外输出

时间:2012-01-17 19:58:09

标签: java sorting

我有以下程序

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]。为什么呢?

3 个答案:

答案 0 :(得分:6)

因为i1 < i2i2 > 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);