此问题已经在这里有了答案:
假设我在Java
中有一个数组:
int[][] arr = new int[n][2];
例如,我想根据第二维的第一个值对它进行排序,因此对于每个元素i
,arr[i][0]
。
[我看到Java
中有两种类似的方法,我想知道有什么区别(效率,何时使用哪种方法,...)。
方法1)
Arrays.sort(arr, (a, b) -> {
a[0] - b[0];
});
方法2)
Arrays.sort(arr, new Comparator<int[]>(){
@Override
public int compare(int[] a, int[] b) {
return a[0] - b[0];
}
};
替代方法:
class Test implements Comparable<Test>{
int val0, val1;
// Contructor
public int compareTo(Test t) {
return val0.compareTo(t.val0);
}
}
然后在main方法中使用:
Arrays.sort(arr);
arr在哪里:
Test[] arr = new int[n];
这里val0
和val1
分别是第二维的第0个值和第1个值。我不会创建一个类来比较一个值,但是有时我将其用于更复杂的系统,这反过来又是创建比较器的另一种方式,如果我测量计算时间,它会更快,您知道为什么吗?] >
该问题与this不同,因为它没有询问如何比较。它也与this不同,因为它还考虑了类定义的Alternative method
。并且this未指定关于比较。假设我在Java中有一个数组:int [] [] arr = new int [n] [2];我想例如根据第二维的第一个值对它进行排序,因此对于每个元素i,arr [i] [0]。我看到了...
假设您有尺寸为3
的二维数组和相应的元素
int[][] arr= new int[3][3];
arr[0]= new int[]{1,2,3};
arr[1]= new int[]{2,1,3};
arr[2]= new int[]{0,0,3};
您可以将Arrays.sort()
与Comparator
一起使用,以基于每个内部数组的第一个元素进行排序
System.out.println(Arrays.deepToString(arr)); //[[1, 2, 3], [2, 1, 3], [0, 0, 3]]
Arrays.sort(arr, Comparator.comparingInt(i->i[0]));
System.out.println(Arrays.deepToString(arr)); // [[0, 0, 3], [1, 2, 3], [2, 1, 3]]