前言
在前几篇文章中,壹哥给大家介绍了Java里的一维数组,涉及到了数组的创建初始化、数组遍历、拷贝、扩容、排序、查找等核心内容,这些内容都是数组中的重点,壹哥希望大家要在这些知识点上多付出点时间和精力。但是我们知道,除了有一维数组之外,还有二维数组和多维数组,这些内容同样很重要。所以今天壹哥就在一维数组的基础上,继续给大家讲解多维数组的内容。
-------------------------前戏已做完,精彩即开始-----------------------
【资料图】
全文大约【3000】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富案例及配图,让你更好地理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考......
一. 多维数组
1. 概念
多维数组可以看成是数组的数组。比如二维数组就是一个特殊的一维数组,它的每个元素都是一个一维数组。其他多维数组的概念,大家可以参照二维数组以此类推。
2. 分类
多维数组可以分为:
● 二维数组;
● 三维数组;
● 其他数组;
其实我们在开发时,真正常用的数组也就是一维数组和二维数组,更多维度的数组很少使用。所以接下来在本篇文章中,壹哥主要是给大家讲解二维数组相关的内容。
二. 二维数组
1. 概念
二维数组就是一种数组的数组,其本质上还是一个一维数组,只是它的数据元素又是一个一维数组。如果你对这个概念想象不出来,壹哥给大家举个栗子,相信吸烟的同学一下子就会明白。
一根烟 = 一个变量
一包烟 = 20根烟 = 一维数组
一条烟 = 10包烟 = 二维数组
也就是说,我们买的”一条烟“,就是一种”二维数组“,明白了吧?
2. 定义
定义二维数组的基本语法如下:
定义方式一:
元素类型[][] 数组名称;
定义方式二:
元素类型 数组名称[][];
在开发时,第一种定义方式更常用一些。这是数组的定义,我们还要对数组进行初始化。二维数组在初始化时,也分为动态初始化和静态初始化两种情况。我们可以把数组的定义和初始化在多条语句中分开完成,也可以直接放在一个语句中完成。
3. 初始化
3.1 动态初始化
二维数组进行动态初始化时,语法格式如下:
元素类型[][] 数组名称 = new 元素类型[二维数组的长度][一维数组的长度];
例如:
int[][] arr = new int[3][4];
在上述示例中,表示我们定义了一个整型的二维数组arr。3表示在二维数组中有3个一维数组,每个一维数组就是一行;4表示每个一维数组中有4个数据元素,这样就形成了二维数组的4列。这样我们就可以把这个二维数组arr看成是一个3行4列的数组或矩阵,访问二维数组中的某个元素时,需要使用arr[row][col]的形式。所以二维数组中,总的元素个数最多有3*4=12个。
以下是动态初始化的案例代码。
注意:我们在对二维数组进行动态初始化时,必须先指定出二维数组的长度,但一维数组的长度可以后续使用前再单独指定。
3.2 静态初始化
二维数组中,每个一维数组的长度并不要求相同,可以各不相同。二维数组进行静态初始化时,语法格式如下:
元素类型[][] 数组名称 = new 元素类型[][]{{一维数组1,一维数组2,一维数组3....};
例如:
int[][] arr = new int[][]{{2,3},{5,2,1},{10,45,22,54}};
但是这种方式的语法显得有些啰嗦,所以在实际开发时,我们一般是采用简化的静态初始化方式,如下所示:
元素类型[][] 数组名称 =m{{一维数组1,一维数组2,一维数组3....};
例如:
int[][] arr = {{2,3},{5,2,1},{10,45,22,54}};
以下是静态初始化的案例代码。
以上是定义和初始化二维数组的基本案例,为了加深大家对二维数组的理解,接下来壹哥再设计几个代码案例,巩固二维数组的用法。
4. 扩展案例
4.1 动态初始化的变形写法
如果我们在定义二维数组时,没有给定一维数组的长度,那么在使用数组之前,一定要先对一维数组进行初始化。否则,此时如果直接使用一维数组,就会产生空指针异常java.lang.NullPointerException。
arr[0]=new int[2] 和 arr[1]=new int[1]是在为最高维分配引用空间,也就是限制了最高维能保存数据的最大长度。
4.2 遍历二维数组
因为二维数组中包含若干个一维数组,我们之前遍历一维数组时要使用一个循环,所以我们对二维数组进行遍历时就要使用嵌套的双重循环。当然,for/while/foreach等循环都可以使用。
5. 内存分析
对于一个二维数组来说,比如int[][] array={{10,0,0,20,0},{0,30,40,0,0},{0,0,0,0,0}};这个二维数组的结构如下图所示:
array[0]会获取array数组的第1个元素,因为array数组的每个元素都是一个一维数组,因此array[0]指向的数组就是{ 10, 0, 0, 20, 0 },其他的以此类推。
高维数组中的每个数据元素,保存的是低位数组的首地址。所以我们访问array[0]就相当于是在访问二维数组中的第一个一维数组的首地址,这样就可以得到第一个一维数组。
三. 多维数组
理论上,在Java中我们可以定义出任意维度的数组。但高于二维的多维数组,在实际开发中很少使用,大家知道Java中支持这种数据结构即可。如果你感兴趣,可以尝试着自己构造一个三维数组出来,壹哥就不在这里过多讲解啦,可以参考如下:
----------------------正片已结束,来根事后烟---------------------
至此,壹哥就把二维数组的内容给大家介绍完了,现在你知道如何使用二维数组了吗?二维数组的定义、动态和静态初始化、内存分析都是今天的重点,大家要牢牢掌握哦。
在下一篇文章中,壹哥会给大家讲解Java里的可变参数,敬请期待哦。另外如果你独自学习觉得有很多困难,可以加入壹哥的学习互助群,我们一起交流学习。
六. 今日作业
1. 第一题
利用二维数组,打印出一个杨辉三角形来。
相关推荐:
数组排序与二分查找法
数组扩容与数组拷贝图文案例详解
一维数组的使用方法详解
java中foreach循环用法详解
想了解更多精彩内容,快来关注IT千锋教育
标签: