首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java 二维数组排序

java 二维数组排序

作者头像
全栈程序员站长
发布2022-09-06 09:27:16
发布2022-09-06 09:27:16
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

二维数组排序

① 实现Comparator接口 :匿名内部类实现

初始化数组int [][]arr = new int [n][2];

排序规则: 对于n行两列的元素,先按数组的第一列进行升序排序,若某两行第一列相等,则按照第二列进一步排序。

使用APIArrays.sort()(T[] a, Comparator<? super T> c),该API根据给定的比较器对指定的数组进行排序。

compare 方法和sort 方法:compare方法返回int型数据,如果返回值大于0,表示需要交换两个元素;返回值小于0表示顺序正确;返回值等于0表示两个数相等。

代码实现

代码语言:javascript
代码运行次数: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表达式实现,代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
// 仅按第一列元素升序排序
Arrays.sort(arr, (e1, e2) -> (e1[0] - e2[0]));   // "->"lambda表达式符号,其将参数与实现隔开。
代码语言:javascript
代码运行次数:0
运行
复制
// 先按第一列元素升序排序,如果第一列相等再按第二列元素升序;
Arrays.sort(arr, (e1,e2)->(e1[0]==e2[0]?(e1[1]-e2[1]):(e1[0]-e2[0])));

二维数组翻转90度

  1. 介绍:将给定二维数组翻转90度
  2. 示例:[[1,2,3],[4,5,6],[7,8,9]]] -> [[7,4,1],[8,5,2],[9,6,3]] 算法(空间复杂度为常数): ①:首先按照对角线进行交换,然后上下交换;
代码语言:javascript
代码运行次数:0
运行
复制
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();

②:按照斜对角线交换,然后左右交换;

代码语言:javascript
代码运行次数:0
运行
复制
//斜对角线翻转
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)

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135204.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月5,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二维数组排序
    • ① 实现Comparator接口 :匿名内部类实现
    • ② lambda表达式实现
  • 二维数组翻转90度
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档