大家好,又见面了,我是你们的朋友全栈君。
二维数组排序
① 实现Comparator接口 :匿名内部类实现
初始化数组:int [][]arr = new int [n][2];
排序规则: 对于n行两列的元素,先按数组的第一列进行升序排序,若某两行第一列相等,则按照第二列进一步排序。
使用API:Arrays.sort()(T[] a, Comparator<? super T> c)
,该API根据给定的比较器对指定的数组进行排序。
compare 方法和sort 方法:compare方法返回int型数据,如果返回值大于0,表示需要交换两个元素;返回值小于0表示顺序正确;返回值等于0表示两个数相等。
代码实现:
Arrays.sort(arr, new Comparator<int[]>() {
// 匿名内部类
@Override
public int compare(int[] e1, int[] e2) {
// 如果第一列元素相等,则比较第二列元素
if (e1[0]==e2[0]) return e1[1]-e2[1]; // e1[1]-e2[1]表示对于第二列元素进行升序排序
return e1[0]-e2[0]; // e1[0]-e2[0]表示对于第一列元素进行升序排序
}
});
② lambda表达式实现
法①使用匿名内部类实现comparator接口,同样也可以使用lambda表达式实现,代码如下:
// 仅按第一列元素升序排序
Arrays.sort(arr, (e1, e2) -> (e1[0] - e2[0])); // "->"lambda表达式符号,其将参数与实现隔开。
// 先按第一列元素升序排序,如果第一列相等再按第二列元素升序;
Arrays.sort(arr, (e1,e2)->(e1[0]==e2[0]?(e1[1]-e2[1]):(e1[0]-e2[0])));
二维数组翻转90度
-
介绍:将给定二维数组翻转90度
-
示例:[[1,2,3],[4,5,6],[7,8,9]]] -> [[7,4,1],[8,5,2],[9,6,3]]
算法(空间复杂度为常数):
①:首先按照对角线进行交换,然后上下交换;int[][] matrix = new int[][]{ { 1,2,3}, { 4,5,6}, { 7,8,9}}; int len = matrix.length; // 按主对角线交换 for (int i = 0; i < len; i++) { for (int j = 0; j < len - i; j++) { int temp = matrix[i][j]; matrix[i][j] = matrix[len-j-1][len-i-1]; matrix[len-j-1][len-i-1] = temp; } } //上下翻转 for (int i = 0; i < len/2; i++) { for (int j = 0; j < len; j++) { int temp = matrix[i][j]; matrix[i][j] = matrix[len-i-1][j]; matrix[len-i-1][j] = temp; } } // 翻转后: for (int[] ints : matrix) { for (int num : ints) { System.out.print(num + " "); } System.out.println(); }
②:按照斜对角线交换,然后左右交换;
//斜对角线翻转 for(int i = 0; i < len; i ++){ for(int j = i; j < len; j ++){ int temp = matrix[i][j]; matrix[i][j] = matrix[j][i]; matrix[j][i] = temp; } } //左右翻转 for(int i = 0; i < len; i ++){ for(int j = 0; j < len/2; j ++){ int temp = matrix[i][j]; matrix[i][j] = matrix[i][len-j-1]; matrix[i][len-j-1] = temp; } } // 翻转后: for (int[] ints : matrix) { for (int num : ints) { System.out.print(num + " "); } System.out.println(); }
参考
https://www.apiref.com/java13/java.base/java/util/Arrays.html#sort(T[],java.util.Comparator)
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135204.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...