引入
上一篇博客相信已经带领各位对数组及其有关数据结构有了初步了解,于是,在此,我将数组有关知识进行升级,接下来你们将会看到多维数组以及数组排序的有关知识。
1.多维数组及其操作
1.1二维数组的概念
一天,刘某和袁某来剧院看青海摇,望着剧院的一大片座位,袁某不知道坐哪,而刘某把票拿了出来,上面显示三行七列,于是他很容易地找到了座位,那么显然,座位的分布是二维的,要通过行和列我们才能知道具体位置,二维数组也是如此,我们仍可以用行和列来表示相同类型变量的有序集合。
二维数组存储形式如下(int[3][4] arr:3为行,4为列)
0 | 1 | 2 | 3 | |
0 | (0,0) | (0,1) | (0,2) | (0,3) |
1 | (1,0) | (1,1) | (1,2) | (1,3) |
2 | (2,0) | (2,1) | (2,2) | (2,3) |
我们之前讲过,数组的下标从0开始,因此,在二维数组中,行和列各自的下标也是从0开始,到对应长度-1。而行与列对应的坐标存储了相同类型的变量。由于数组是顺序存储的,在二维数组中也一样(因此:上图中坐标(0,3)的元素和(1,0)的元素在内存中也是连续的)。
1.2二维数组的操作
1.数组元素的初始化
类似于一维数组,共有三种形式,示例代码如下:
//数据类型[][] 数组名称= new 数据类型[第一维的长度][第二维的长度] int[][] array = new int[2][3]; //数据类型[][] 数组名称 int[][] array; //数组名称= new 数据类型[第一维的长度][第二维的长度] array = new int[2][3]; ->int[2][3] array = {{1,2,3},{4,5,6}};
特殊地,我们规定二维数组初始化时也可以只给出第一维长度,
如:int[ ][ ] n = new int[2][ ];但是不能只给出第二维长度。
然后分别初始化后续的元素,n[0] = new n[2]; n[1] = new n[6];
这里首先是把n看成了一个一维数组,然后对它的两个元素进行动态初始化,使它成为二维数组。
2.读取元素
由于二维数组亦在内存中顺序存储,给出下标就会得到对应的数组元素。仍需注意,输入的下标不能超出数组长度。
int[][] array = {{1,2,3},{4,5,6}}; //初始化数组元素 System.out.println(array[1][1]); //第二行第二列的元素->5
3.更新元素
与一维数组相同,二维数组更新的操作也是直接赋值
int[][] array = {{1,2,3},{4,5,6}}; //给下标为(1,1)的元素重新赋值 array[1][1] = 5; //输出更新后的元素 System.out.println(array[1][1]);
下面我们来看一下二维数组的自定义初始化与输出:
import java.util.Scanner; public class _2D_Array { public static void main(String[] args){ //创建定义二维数组 int[][] array =new int[4][5]; //创建Scanner Scanner input = new Scanner(System.in); //给二维数组中的一维数组赋值 for(int i = 0; i < array.length; i++){ for(int j = 0; j < 5; j++){ array[i][j] = input.nextInt(); } } //查看二维数组中的一维元素 for(int a = 0; a < array.length; a++){ for(int b = 0; b < 5; b++){ System.out.println(array[a][b]); } } } }