JavaSE回顾(五):Java中的二维数组

本文深入解析二维数组的本质,探讨其内存结构、初始化及遍历方法。二维数组实为一维数组的嵌套,由多个一维数组构成。文章详细介绍了静态与动态初始化方式,并提供了实例说明。同时,通过for循环与foreach循环演示了二维数组的遍历技巧。
摘要由CSDN通过智能技术生成

简介

二维数组本质上也是一维数组,只不过每个元素又是一个一维数组 ,所以可以将它看作是一维数组的嵌套。

二维数组内存结构

在这里插入图片描述
如上图所示可以看出二维数组内元素保存的其实是若干个一维数组的引用(或者说内存地址)。在定义二维数组时,会在堆内存为其分配内存空间,所以必须知道二维数组的行数,也就是一维数组的个数,才能够为其分配内存空间。这也是为什么在初始化时可以省略列数,不可以省略行数的原因。
上面提到了列和行,二维数组的行可以看作是一维数组的个数,而它的列则可以看作是一维数组的大小。

初始化方式

1.静态初始化
数据类型 [ ][ ] 数组名 = {{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}…};
例如:

int[][] array = {{1,2},{3,4},{5,6}};

2.动态初始化

  • 数据类型[ ][ ] 数组名 = new 数据类型 [m][n]
  • 数据类型 数组名[ ][ ] = new 数据类型 [m][n]
  • 数据类型[ ] 数组名[ ] = new 数据类型 [m][n]

上面三种动态初始化方式效果都是一样的,不过为了规范起见还是使用第一种比较好。

//定义一个三行四列的数组
int[][] array = new int[3][4];
int array[][] = new int[3][4];
int[] array[] = new int[3][4];

除了这样,动态初始化时还可以省略列数,也是可行的。

  • 数据类型[ ][ ] 数组名 = new 数据类型 [m][ ]

例如:

//声明一个二维数组,用于存储3个一维数组,至于每一个一维数据存多少个数据,不知道。
int[][] array  = new int[10][];

遍历方式

1.for循环遍历

由于上面提到过,二维数组的行可以看作是一维数组的个数,而它的列则可以看作是一维数组的大小。所以可以很方便的就用for循环来完成遍历。

public class TestDemo {
    public static void main(String[] args){
        int[][] array  = {{1,2,3},{4,5,6},{7,8,9}};
        for (int i = 0; i < array.length; i++) {   //二维数组的大小(即二维数组中有多少个一维数组)
            for (int j = 0; j < array[i].length; j++) {  //遍历每一个一维数组
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }
    }
}
打印结果:
1 2 3 
4 5 6 
7 8 9 

2.foreach遍历

public class TestDemo {
    public static void main(String[] args){
        int[][] array  = {{1,2,3},{4,5,6},{7,8,9}};
        for (int[] arr : array) { //int[]为二维数组中元素的类型, arr为迭代变量, array为要遍历的二维组的名称
            for (int i: arr) {  //int为一维数组中元素的类型,i为迭代变量,arr是一维数组的名称
                System.out.print(i+" ");
            }
            System.out.println();
        }
    }
}
打印结果:
1 2 3 
4 5 6 
7 8 9 

3.除了这两种方式之外,for循环还能和foreach循环搭配使用。

public class TestDemo {
    public static void main(String[] args){
        int[][] array  = {{1,2,3},{4,5,6},{7,8,9}};
        for (int[] arr : array) {
            for (int i=0;i<arr.length;i++) {
                System.out.print(arr[i]+" ");
            }
            System.out.println();
        }
    }
}
打印结果:
1 2 3 
4 5 6 
7 8 9 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值