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();
        }
    }
}
相关推荐
金銀銅鐵5 小时前
带您看懂字节码指令(一):一帧里有什么
java·后端·ai编程
nice_lcj5207 小时前
【从零理解 Spring AI · 14】RAG 的四个环节:加载、切分、向量化、检索
java·spring boot·embedding·向量数据库·rag·spring ai·ai应用开发
SomeOtherTime8 小时前
Rust所有权(AI回答)
开发语言·后端·rust
Easyhood8 小时前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API
android·开发语言·kotlin·android jetpack·compose
白杨尚青9 小时前
C++进阶篇(六):map 和 set 的模拟实现——用红黑树封装 mymap/myset(迭代器 + operator[])
开发语言·c++·迭代器·stl·set·map·红黑树
学长毕设9 小时前
基于springboot科创竞赛信息平台-附源码
java·spring boot·后端
聪明的笨猪猪10 小时前
Java 工程案例:AI 生成 @Async 异步线程池踩坑
java·经验分享·面试·ai编程
学长毕设10 小时前
基于SpringBoot公务员考试交流平台-附源码
java·spring boot·后端
SL_staff12 小时前
私有化低代码:面向强监管行业的可控数字化实践
java·低代码
饮水桶_T12 小时前
JAVA IO流笔记
开发语言·数据结构·算法