java二维数组

一、二维数组的概述:

目录

二维数组的概述:

二维数组图解:

二维数组的四种创建方式:

[Java 用sort对二维数组进行排序](#Java 用sort对二维数组进行排序)


二维数组简单概述:Java中的二维数组一般应用在矩阵的一些运算、棋盘游戏中棋盘的实现、二维数据的处理、图表的绘制、数据库的存储等方面。特别是在处理数据表示矩阵等情况下非常有用,可以方便的存储和操作数据。

二、二维数组图解:

二维数组本质上是每个一维数组都包含一个或多个元素,其中每个元素都代表二维数组中的一个元素。因此,二维数组是以数组作为其元素的数组,即数组的数组。

例如:int[ ][ ] arr = new int[3][4];(3行,4列) 这段代码创建的时候是创建了数组,如下图。

三、二维数组的四种创建方式:

1.通过实例化创建一个数组对象

复制代码
//方式一
int[][] arr1 = new int[3][4];
//循环遍历数组给数组赋值
for (int i = 0; i < arr1.length; i++) {
	for (int j = 0; j < arr1[i].length; j++) {
		arr1[i][j] = 5;
	}
}
//打印输出一下看一下结果
System.out.println(Arrays.deepToString(arr1));

以上这段代码的输出结果:

复制代码
[[5, 5, 5, 5], [5, 5, 5, 5], [5, 5, 5, 5]]

2.通过数组指针用new开辟空间

java 复制代码
//方式二
int[][] arr2 = new int[3][];
arr2[0] = new int[2]; // 第一行 2个元素
arr2[1] = new int[4]; //第二行 3个元素
for (int i = 0; i < arr2.length; i++) {
	if (arr2[i] != null) {
		for (int j = 0; j < arr2[i].length; j++) {
			arr2[i][j] = 5;
		}
	}
}
System.out.println(Arrays.deepToString(arr2));

以上这段代码的输出结果:
通过new开辟空间之后,如果不赋值,该空间的值是默认值null。

java 复制代码
[[5, 5], [5, 5, 5, 5], null]

3.声明并初始化

java 复制代码
//方式三
int[][] arr3 = new int[][] { { 1, 2, 3 }, { 1, 2, 3 }, { 1, 2, 3 } };

4.声明并初始化的简写方式

java 复制代码
//方式四,通用简写方式
int[][] arr4 = { { 1, 2, 3 }, { 1, 2, 3 }, { 1, 2, 3 } };

以下是使用二维数组时需要注意的几个事项:

声明和初始化:在声明二维数组时,需要指定行和列的数量。例如,int\[\]\[\] array = new int34;声明了一个3行4列的二维数组。

访问元素:可以通过arrayrowcol的方式访问二维数组中的元素。行和列都是从0开始计数的。

越界:访问二维数组的元素时,需要注意不要越界。例如,访问array34将会导致数组越界异常。

初始化:在使用二维数组之前,需要先对其进行初始化。可以通过分配 初始值的方式初始化二维数组,也可以在声明时直接初始化。

内存表示:二维数组在内存中是连续存储的。每一行都是一个连续的元素序列,然后每一行的元素在内存中是连续存储的。

传递参数:当将二维数组作为函数参数传递时,需要指定列的数量。这是因为Java在传递二维数组时实际上是传递了一个指向二维数组的指针。

四、Java 用sort对二维数组进行排序

用Arrays.sort()对一维数组进行降序排序(改变原来数组)相信大家一定不陌生,但对今天给大家分享一下sort对二维数组的3种排序方式。

1.重写compare()方法

java 复制代码
import java.util.Arrays;
import java.util.Comparator;
 
public class test {
    public static void main(String[] args) {
        int[][] arr = {{1,5},{5,3},{3,34},{2,4}};
       Arrays.sort(arr, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[0] - o2[0];//数组里面的下标为0,表示排序根据数组的第一列排序
            }
        });
        
        for (int[] arrs:arr){
            for (int n:arrs){
                System.out.print(n+" ");
            }
            System.out.println();
        }
    }
}

(2)使用Lambda表达式的方式对Comparator比较器进行简写(JDK1.8以上可用Lambda表达式)

java 复制代码
import java.util.Arrays;
import java.util.Comparator;
 
public class test {
    public static void main(String[] args) {
        int[][] arr = {{1,5},{5,3},{3,34},{2,4}};
     
        
        Arrays.sort(arr,((o1, o2) -> {
            return o1[0]-o2[0];
        }));
        for (int[] arrs:arr){
            for (int n:arrs){
                System.out.print(n+" ");
            }
            System.out.println();
        }
    }
}

(3)用comparingInt(a->aindex)排序

二维数组会根据第index+1(index=1或index=0)的数据进行排序

java 复制代码
import java.util.Arrays;
import java.util.Comparator;
 
public class test {
    public static void main(String[] args) {
        int[][] arr = {{1,5},{5,3},{3,34},{2,4}};
      
        Arrays.sort(arr,Comparator.comparingInt(a->a[0]));//根据二维数组的第一列数据进行比较
       
        for (int[] arrs:arr){
            for (int n:arrs){
                System.out.print(n+" ");
            }
            System.out.println();
        }
    }
}

运行结果

一下是上述三种方法以数组第一列为数据进行排序的运行结果

根据第二列数据进行排序

java 复制代码
import java.util.Arrays;
import java.util.Comparator;
 
public class test {
    public static void main(String[] args) {
        int[][] arr = {{1,5},{5,3},{3,34},{2,4}};
     
        Arrays.sort(arr,((o1, o2) -> {
            return o1[1]-o2[1];
        }));
        for (int[] arrs:arr){
            for (int n:arrs){
                System.out.print(n+" ");
            }
            System.out.println();
        }
    }
}
相关推荐
Devin~Y4 分钟前
大厂 Java 面试实录:从音视频内容社区到 AI RAG 的全链路技术设计
java·spring boot·redis·spring cloud·微服务·kafka·音视频
在放️6 分钟前
Python 练习题讲解 2 · 循环计算
开发语言·python
CoderYanger9 分钟前
A.每日一题:3612. 用特殊操作处理字符串 I
java·程序人生·leetcode·面试·职场和发展·学习方法·改行学it
江华森11 分钟前
高级 Bash 脚本编程指南 — 实战教程
开发语言·bash
我不是懒洋洋16 分钟前
【C++】string(string的成员变量、auto和范围for、string常用接口的说明、OJ题目、string的模拟实现)
c语言·开发语言·c++·visual studio
Brilliantwxx18 分钟前
【C++】 C++11 知识点梳理(中)
开发语言·c++
j7~21 分钟前
【C++】STL--Vector容器--拆析解剖Vector的实现以及Vector的底层详解(2)
开发语言·c++·动态二维数组·vector深度剖析·vector的实现·杨辉三角形
唐青枫1 小时前
Java Flyway 实战指南:用 SQL 脚本管理数据库版本
java
三品吉他手会点灯7 小时前
C语言学习笔记 - 50.流程控制4 - 流程控制为什么非常非常重要
c语言·开发语言·笔记·学习
huangdong_8 小时前
电商平台图片URL原图转换技术深度解析:从缩略图到高清原图的完整方案
java·后端·spring