java 二维数组排序

java 二维数组排序①使用Comparator生成一个比较器对象初始化数组:int[][]arr=newint[m][n];排序规则:先按数组的第一个元素进行升序排序,若第一个元素相等,则按照第二个元素进行升序排序。使用API:Arrays.sort()(T[]a,Comparator<?superT>c),该API根据给定的比较器(设定排序方式)对指定的数组进行排序。代码实现:Arrays.sort(arr,newComparator<int[]>(){

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

二维数组排序

① 实现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[]>() { 
       // 匿名内部类
	@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度

  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)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • react中添加debounce 实现[通俗易懂]

    react中添加debounce 实现[通俗易懂]react中添加debounce实现handelChange(e){//输入框修改的时候执行的方法 e.persist()//react默认会清楚所有的默认属性,所以需要添加这段,保留参数的属性 debounce(()=>{ console.log(e) },500)() }<inputref={ev=>this.moneyInp…

    2022年6月20日
    73
  • Vagrant 基本使用操作

    Vagrant 基本使用操作OthersVagrant基本使用操作Vagrant是什么?Vagrant安装Vagrant快速上手安装CentOSVagrant基本命令小结Vagrantfile文件Vagrant基本使用操作Vagrant是什么?Vagrant是一款支持自动化虚拟机暗转、可配置流程的用于管理虚拟机的软件.主要的优势在于可以提供一个可配置、可移植和复用的虚拟机环境(通过定义Vagr…

    2025年7月29日
    3
  • keyvaluepair_C# KeyValuePair<TKey,TValue>的用法【转】 .

    keyvaluepair_C# KeyValuePair<TKey,TValue>的用法【转】 .KeyValuePair可以这样实例化KeyValuePairmcmillan=newKeyValuePair(“McMillan”,99);取值Console.Write(mcmillan.Key);Console.Write(“”+mcmillan.Value);以下是一个把对象放到数组中usingSystem;usingSystem.Collections.Generic…

    2022年7月13日
    19
  • 全排列 leetcode_leetcode top100

    全排列 leetcode_leetcode top100原题链接给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]题解回溯即可class Solution {public: vector<vector<int> >res; vector<int>t; void dfs(int num,int len,vecto

    2022年8月8日
    4
  • ActiveMQ官方文档-web示例

    ActiveMQ官方文档-web示例

    2021年9月7日
    54
  • 直流电机、减速器、编码器与TB6612FNG知识整理

    之前把MPU6050的相关知识了解了一下,可以做到测量欧拉角,在平衡小车的开发中需要测量小车的倾角来调整小车姿态。接下来该学习小车的电机驱动部分了,这里整理一下直流电机、减速器、编码器以及TB6612FNG的知识,为下一步驱动电机打基础!文章目录一.直流电机1.定义2.原理二.TB6612FNG1.简介2.优点3.使用方法三.减速器1.作用2.分类四.编码器1.概述2.原理3.四倍频技术一…

    2022年4月7日
    300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号