Java Arrays.sort用于二维整数数组失败

Java Arrays.sort用于二维整数数组失败,java,multidimensional-array,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 numOf

我使用下面的方法对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;
  }
私有静态整数[][]排序(整数[][]bs){
sort(bs,新的Comparator(){
@凌驾
公共整数比较(整数[]整数1,整数[]整数2){
整数numOfKeys1=int1[1];
整数numOfKeys2=int2[1];
返回numOfKeys1.compareTo(numOfKeys2);
}
});
返回bs;
}
输入阵列:

480 615
13201395
1020 1140
420 585
540780
960 1065
720 810
690750

输出:

420 585
480 615
690750
540 780-未排序
720 810
960 1065
1020 1140

1320 1395

您正在按第二个值而不是第一个值排序。 尝试以下方法:

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

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

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;
}
public int compare(Integer[]int1,Integer[]int2){
int minlen=Math.min(int1.length,int2.length);
对于(int i=0;i