深入理解Java中的二维数组

引言

最近做剑指offer里面的题时经常遇见二维数组相关的题型,对java中的二维数组的一些概念需要有个清晰的认知,特此记录下自己的总结。

Java中二维数组的初始化

1.直接以集合的形式写出二维数组的所有值

例如:
int[][] array = {{1,2},{3,4}};
这段代码可以初始化获得一个二维数组array,其具有2个1维数组,每个1维数组长度均为2。此时理解二维数组,二维数组本质上是一个一维数组即一个集合,集合中的每个元素同样是一个集合(一个一位数组),理解这个二维数组的本质便于理解后续判断二维数组为空的情况。

2.直接固定二维数组的每一维度的长度,可以不具体固定每一维度的数值

例如:
int[][] array = new int[2][2];
这段代码同样初始化了一个与1中具有相同空间大小的二维数组array。
后续可以分别对二维数组中的某个元素进行单独赋值 int array[i][j] =__。

3.动态分配二维数组的长度

二维数组本质上是一个一维数组,是一个可具有重复元素的集合,因此二维数组必须要规定第一个维度的长度,即二维数组看做一个一维数组,在这样的抽象下,该一维数组的每一个元素又是一个单独的(集合)一维数组,因此这些独立的元素的长度可以不等。
例如下图的代码能够创建一个二维数组,该数组只的第一行只有一个元素,第二行有两个元素。然后遍历打印该数组,看看是否正常创立。

int[][] array = new int[2][];
        for(int i=0; i<array.length; i++){
            array[i] = new int[i+1];
        }
        for(int i=0; i<array.length; i++){
            for(int j=0; j<array[i].length; j++){
                System.out.println("array["+i+"]["+j+"] = "+array[i][j]);
            }
        }

程序运行结果:

array[0][0] = 0
array[1][0] = 0
array[1][1] = 0

Java中二维数组的长度问题

1.array.length

在二维数组的初始化里面我们初始化了一个array的数组,具体运用的第三种方法中的代码创建的,其总共有两行,第一行只有一个元素,第二行有两个元素,所以这个二维数组的长度是多少呢?
array.length 表示的是数组的长度,此时用到了本文之前提得到的方法,将二维数组抽象等价为一个集合,这个集合具有的元素个数就是这个二维数组的长度,即array.length 。
显而易见,根据上面代码图我们创建的二维数组里有两个元素(每个元素是一个一维数组)

2.array[i].length

array[i].length 表示的是(二维数组所等价的)集合中第i+1个元素(该元素本身是一个一维素组)作为一维素组的数组的长度。
具体在上图的代码中二维数组的第一行只有一个元素,第二行有两个元素,即array[0].length = 1;array[1].length = 2.

Java中判断二维数组为空的所有条件

在做剑指offer中二维数组中数字查询等题目时,测试结果样例显示当输入的测试样列是空的二维数组为空数值输入的时候,我的代码错误。但在我加上了简单的判断 array.length != 0 之后,同样测试失败,测试的数据是 “{{}}” 在查询了资料之后我终于明白了,二维数组内容为空的几种情况,总结如下。

1.二维数组首地址是否为空,即array == nul

如果二维数组的首地址为空,说明该数组不存在(未定义)

2.二维数组是否为{}, 即array.length==0

当二维数组的输入样例为{},其实表示的意思类似空集,即当将二维数组看做一个一维数组时,该一维数组一个元素也没有。

3.二维数组是否为{{}},此时行数为1,列数为0

当二维数组的输入样例为{{}}时,其所表达的意思就是 将二维数组看做一个集合,该集合只有一个元素,这个元素是个空集,由于空集不存在任何元素内容,所以这种情况下去判断二维数组是否存在某个数当然不行。
此种情况下 array.length = 1; array[0].length = 0;

参考文章:
java初始化二维数组的三种方式
空二维数组的长度

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值