Java Arrays.sort用于二维整数数组失败
我使用下面的方法对2D整数数组进行排序。但排序似乎存在一些问题。有人能帮忙吗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
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 61513201395
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