二维数组排序

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

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

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

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

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

代码实现

Arrays.sort(arr, new Comparator<int[]>() {    // 匿名内部类@Overridepublic 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度

  1. 介绍:将给定二维数组翻转90度

  2. 示例:[[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)

java 二维数组排序相关推荐

  1. Java二维数组排序(按照某一列值大小)

    利用Comparator接口来实现: 若对Comparator接口不熟悉请先看这一篇:https://blog.csdn.net/weixin_43849277/article/details/108 ...

  2. java 二维数组排序 sort_js sort 二维数组排序的用法小结

    最近在搞js 排序的问题,因为数据库排序太耗资源,如果能转移到客户端去排序,能大大D减少服务器内存消耗.客户端的话,除了js,就是as了,可惜我as学得太烂,所以只能选择js来研究研究了...经过我的 ...

  3. Java二维数组排序

    今天在刷 力扣的时候,有道题卡住了,没办法去看题解,发现题解是将其二维数组排序了,我才猛然发现我还不了解二位数组排序的知识.所以来记录一下. 答案中的代码是这样的,假设需要排序的数组intervals ...

  4. java二维数组排序先行后列,数组知识点归纳

    ◆◆◆一.理解一维数组的定义和应用,了解二维数组和控件数组: 1.数组的概念:数组并不是一种数据类型,而是一组相同类型数据的集合. 用一个统一的名字(数组名)代表逻辑上相关的一批数据,每个元素用下标变 ...

  5. java 二维数组排序_java – 如何对二维ArrayList进行排序

    做这样的事情: final int COLUMN = 5; Comparator> myComparator = new Comparator>() { @Override public ...

  6. java 二维数组 排序_二维数组排序

    参考: https://www.cnblogs.com/rujianming/p/11779922.html https://blog.csdn.net/westwewe/article/detail ...

  7. Java学习----二维数组排序

    课堂代码实验 问题: (对二维数组排序)编写一个方法,使用下面方法对二维数组排序: public static void sort(int m[ ][ ]) 这个方法实现先按行排列后在按列排序. 例如 ...

  8. Java、对二维数组排序

    编写一个方法,使用下面的方法头对二维数组排序:         public static void sort(int m[][]) 这个方法首先按行排序,然后按列排序.         例如:数组{ ...

  9. Java黑皮书课后题第8章:*8.16(对二维数组排序)编写一个方法,使用下面的方法头对二维数组排序。这个方法首先按行排序,然后按列排序

    *8.16(对二维数组排序)编写一个方法,使用下面的方法头对二维数组排序.这个方法首先按行排序,然后按列排序 题目 题目描述 破题 代码 运行实例 题目 题目描述 *8.16(对二维数组排序)编写一个 ...

最新文章

  1. winform解析json
  2. C++的this指针和引用符号的搭配使用理解
  3. Win32汇编扩展教程
  4. 分享让人折服的优秀代码基因
  5. 清华大学王晨阳:轻量级Top-K推荐框架及相关论文介绍
  6. 【前端分享】jQuery.lazyload详解(转)
  7. HDU1403(后缀数组--最长公共子串)
  8. 汉澳sinox2014x64server已经能够下载
  9. EbNo(EbN0)和SNR
  10. 为什么c语言程序设计书不介绍文件删除,C语言程序设计上机指导书2010.doc
  11. cocos 发布android 返回值2,用cocos creator打包发布的时候,编译失败是怎么回事?执行命令出错,返回值:1。...
  12. catia批量转stp文件格式_CATIA CGR格式文件转stp或igs文件 | 坐倚北风
  13. VMware安装Fedora 35 Workstation及使用体验
  14. 什么是收缩压和舒张压?
  15. 使用nslookup查询域名的MX记录
  16. 【odroid-xu3】 ODROID-XU3软件环境搭建记录
  17. 累死你的不是工作是工作方式 好的团队会教你如何工作
  18. 19【numpy中的nan和常用方法】01numpy中的nan和常用统计方法
  19. IDEA 安装插件后打不开
  20. 组合投资分配的方法——【七二一】原则

热门文章

  1. python3实现万年历(包括公历、农历、节气、节日)
  2. idea配置tomcat服务器
  3. Android 浏览器分享到APP
  4. lisp绘制棱锥_ICAD命令全集.doc
  5. 白天wifi上网,晚上收集话费
  6. 调试小妙招之360随身WIFI设置两个热点
  7. 【Python学习笔记】- 04 文件操作
  8. STM32G0学习手册——开发环境搭建与熟悉(CubeMX与MDK5)
  9. 为什么中国做不出《旅行青蛙》这样的游戏?
  10. html设置距离页面上距离,html上下间距怎么调