在JAVA中使用2D数组排序问题

时间:2012-10-09 11:20:27

标签: java arrays multidimensional-array sorting comparator

使用我的以下代码,我尝试对二维数组进行排序

 int[][] d2 = {
           {4,5,1},
           {4,1,1},
           {1,7,1},
           {3,3,2},
           {1}
          };

        java.util.Arrays.sort(d2, new java.util.Comparator<int[]>() {
            public int compare(int[] a, int[] b) {
                return a[0] - b[0];
            }
        });

我在排序后显示数组

for (int r=0; r<d2.length; r++) {
            for (int c=0; c<d2[r].length; c++) {
                System.out.print(" " + d2[r][c]);
            }
            System.out.println("");
}

我得到的结果是这样的

 1 7 1
 1
 3 3 2
 4 5 1
 4 1 1

我希望结果二是这样的

 1
 1 7 1
 3 3 2
 4 5 1
 4 1 1

要使数组按上述方式排序需要做什么?

我尝试用{1}替换{1,0,0},但即使对{1,0,1}也是如此。

2 个答案:

答案 0 :(得分:4)

比较compare方法中传递的数组的长度。如果a[]的长度小于b[],则返回-1: -

    java.util.Arrays.sort(d2, new java.util.Comparator<int[]>() {
                public int compare(int[] a, int[] b) {
                    if (a.length != b.length) {
                        return a.length < b.length ? -1 : 1;
                    }
                    return a[0] - b[0];
                }
            });

如果你想通过检查每个元素来排序,我认为你应该这样做..将你的compare方法改为: -

public int compare(int[] a, int[] b) {

    if (a.length == b.length) {
        for (int i = 0; i < a.length; i++) {
            if (a[i] == b[i]) {

            } else {
                return a[i] - b[i];
            }
        }
        return 0;

    } else {
        return a.length < b.length ? -1 : 1;
    }                       
}

答案 1 :(得分:0)

Comperator中,您只使用第一个字段来比较2个数组。您必须包含所有字段以进行比较,或者至少必须检查数组的长度以获得所需的结果。