Arrays.sort()的用法(对二维数组进行排序)。
四个方法:
sort(T[] a):对指定数组进行升序排列。
sort(T[] a, int fromIndex, int toIndex):对指定数组的指定范围升序排列。
sort(T[] a, Comparator<? supre T> c): 根据指定比较器产生的顺序对指定对象数组进行排序。
sort(T[] a, int fromIndex, int toIndex, Comparator<? supre T> c): 根据指定比较器产生的顺序对指定对象数组的指定范围进行排序。
1. 一维数组降序
// 注意,要想改变默认的排列顺序,不能使用基本类型(int,double, char)
// 而要使用它们对应的包装类
Integer[] nums = new Integer[]{12, 4, 6, 7, 2, 8, 3, 9};
Arrays.sort(nums, Collections.reverseOrder());
System.out.println(Arrays.toString(ints));
// 结果 :[12, 9, 8, 7, 6, 4, 3, 2]
// 或者自定义规则
Arrays.sort(nums, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
// lambda 表达式
Arrays.sort(nums, (o1, o2) -> o2 - o1);
2. 二维数组按照第一维数组排序
int[][] nums=new int[][]{{1,3},{1,2},{5,1},{4,5},{3,3}};
//方法一
Arrays.sort(nums,new Comparator<int[]>(){
@Override
public int compare(int[] a,int[] b){
// 当第一维相等时比较第二维的
if(a[0] == b[0]){
return a[1]-b[1];
}else{
return a[0]-b[0];
}
}
});
// 方法二,使用 lambda 表达式
Arrays.sort(nums,(a,b) -> a[0] == b[0] ? a[1]-b[1] : a[0]-b[0]);
for (int[] num : nums) {
System.out.print(Arrays.toString(num));
}
// 结果 : [1, 2][1, 3][3, 3][4, 5][5, 1]
3. 二维数组按照第二维数组排序
int[][] nums=new int[][]{{1,3},{1,2},{5,1},{4,5},{3,3}};
//方法一
Arrays.sort(nums,new Comparator<int[]>(){
@Override
public int compare(int[] a,int[] b){
// 当第二维相等时比较第一维的
if(a[1] == b[1]){
return a[0]-b[0];
}else{
return a[1]-b[1];
}
}
});
// 方法二,使用 lambda 表达式
Arrays.sort(nums,(a,b) -> a[1] == b[1] ? a[0]-b[0] : a[1]-b[1]);
for (int[] num : nums) {
System.out.print(Arrays.toString(num));
}
// 结果 : [5, 1][1, 2][1, 3][3, 3][4, 5]