对2D双数组进行排序

时间:2013-06-07 08:17:35

标签: java sorting matrix double

我尝试在第一个值上对2D双数组(double [] [])进行排序。 示例:{1.0226342823592962,0.0},{1.0395582845873155,1.0} 从最大的价值开始。 这是我使用的代码(java生成的一半)

java.util.Arrays.sort(indexMatrix, new java.util.Comparator<double[]>() {

        @Override
        public int compare(double[] o1, double[] o2) {
            // TODO Auto-generated method stub
            return 0;
        }


    });

然而我的'indexMatrix'在之后没有改变。我认为它与public int compare有关,因为它们彼此如此接近,如果你将它们转换为int,它们将全部为1并且不能被排序。还是别的什么?

4 个答案:

答案 0 :(得分:1)

你必须实现比较方法,你只有一个模板。它保持不变,因为默认情况下返回0表示比较值相等。根据实际情况,其他返回值为-1和+1。

答案 1 :(得分:1)

为什么要将它们转换为整数?只需在排序方法中使用Double.compareTo(Double)方法:

public static void main(String[] args) {

    double[][] indexMatrix = new double[][] {
                  new double[] { 1.02, 100 }, 
                  new double[] { 1.03, 123 },
                  new double[] { 1.01, 321 } };

    Arrays.sort(indexMatrix, new Comparator<double[]>() {
        @Override
        public int compare(double[] o1, double[] o2) {
            return Double.compare(o2[0], o1[0]);
        }
    });

    for (double[] d : indexMatrix)
        System.out.println(Arrays.toString(d));
}

输出:

[1.03, 123.0]
[1.02, 100.0]
[1.01, 321.0]

答案 2 :(得分:1)

不,你不会将你的双打投射到整数。 int正是compare()期望作为返回参数的内容。如果o1o2相等,它应返回0,如果o1 < o2则小于0,如果o1 > o2则大于0。 您只需使用Double.compare()

java.util.Arrays.sort(indexMatrix, new java.util.Comparator<double[]>() {
    @Override
    public int compare(double[] o1, double[] o2) {
        // note that o2 comes first here to sort in descending order
        return Double.compare(o2[0], o1[0]);
    }
});

答案 3 :(得分:0)

使用Java8 +

Arrays.sort(indexMatrix, (Double[] o1, Double[] o2) -> Double.compare(o1[0], o2[0]));