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 int[3][4];声明了一个3行4列的二维数组。

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

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

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

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

传递参数:当将二维数组作为函数参数传递时,需要指定列的数量。这是因为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->a[index])排序

二维数组会根据第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();
        }
    }
}
相关推荐
煤泥做不到的!40 分钟前
挑战一个月基本掌握C++(第十一天)进阶文件,异常处理,动态内存
开发语言·c++
F-2H43 分钟前
C语言:指针4(常量指针和指针常量及动态内存分配)
java·linux·c语言·开发语言·前端·c++
苹果酱05671 小时前
「Mysql优化大师一」mysql服务性能剖析工具
java·vue.js·spring boot·mysql·课程设计
_oP_i2 小时前
Pinpoint 是一个开源的分布式追踪系统
java·分布式·开源
mmsx2 小时前
android sqlite 数据库简单封装示例(java)
android·java·数据库
bryant_meng2 小时前
【python】OpenCV—Image Moments
开发语言·python·opencv·moments·图片矩
武子康2 小时前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
若亦_Royi2 小时前
C++ 的大括号的用法合集
开发语言·c++
资源补给站3 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
豪宇刘3 小时前
MyBatis的面试题以及详细解答二
java·servlet·tomcat