用于2-D整数数组的Arrays.sort失败

时间:2013-08-06 12:06:23

标签: java multidimensional-array

我正在使用以下方法对2D整数数组进行排序。但是排序似乎存在一些问题。有人可以帮忙。

private static Integer[][] sort(Integer[][] bs) {

    Arrays.sort(bs, new Comparator<Integer[]>() {
        @Override
        public int compare(Integer[] int1, Integer[] int2) {
            Integer numOfKeys1 = int1[1];
            Integer numOfKeys2 = int2[1];
            return numOfKeys1.compareTo(numOfKeys2);
        }
    });

    return bs;
  }

输入数组:

480 615
1320 1395
1020 1140
420 585
540 780
960 1065
720 810
690 750

输出:

420 585
480 615
690 750
540 780 - 未分类
720 810
960 1065
1020 1140
1320 1395

2 个答案:

答案 0 :(得分:1)

您按第二个值排序而不是第一个值。 尝试类似:

Integer numOfKeys1 = int1[0];
Integer numOfKeys2 = int2[0];

答案 1 :(得分:1)

它实际上是已排序的,但键是数组中的第二条记录。要按第一个节点对其进行排序,您需要将比较器更改为

public int compare(Integer[] int1, Integer[] int2) {
    Integer numOfKeys1 = int1[0];
    Integer numOfKeys2 = int2[0];
    return numOfKeys1.compareTo(numOfKeys2);
}

或者更好地编写一个按字典顺序排序的比较器

public int compare(Integer[] int1, Integer[] int2) {            
    int minlen = Math.min(int1.length, int2.length);
    for (int i = 0; i < minlen; ++i) {
        int cmp = int1[i].compareTo(int2[i]);
        if (cmp != 0) {
            return cmp;
        }
    }
    // so far the arrays are same, the shorter goes first
    return int1.length - int2.length;
}