关于Java中二维数组的一点见识。Java中二维数组的声明。

int[][] a = {} 和 int[][] a = {{}}

观察代码
package week04.g20200343040172;

public class Main {    
    public static void main(String[] args) {       
        int[][] a = {};       
        int[][] b = {{}};       
        System.out.println("a.length: " + a.length);       
        try {            
            System.out.println("a[0].length: " + a[0].length);       
        } catch (Exception e) {           
            e.printStackTrace();       
        }       
        System.out.println("Is a equals null?: " + (a == null));        
        System.out.println("b.length: " + b.length);        
        System.out.println("b[0].length: " + b[0].length);        
        System.out.println("Is b equals null?: " + (b == null));   
    }
}
打印结果

System.out.println("a[0].length: " + a[0].length) 为第九行,报错!!

a.length: 0
Is a equals null?: false
b.length: 1
b[0].length: 0
Is b equals null?: false
java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 at week04.g20200343040172.Main.main(Main.java:9)
a.length和 a[0].length

对于二维数组

int[][] a = {};
int[][] b = {{}};   
  • a.length打印的是二维矩阵的行的数量,对于M×N的数组而言,a.length对应的就是M。可以把一行看成一个整体,一个二维数组有多少行,里面就有多少个元素。这么来看的话,其实就可以把二维数组当成一个一维数组。
  • a[0].length打印的是二维矩阵的列的数量,对于M×N的数组而言,a[0].length对应的就是N。

  • 对于 int[ ][ ] a = { }。如果我们把一行看作一个元素的话,现在里面完完全全就是空的。我们想当然认为a[0]表示第一行的元素,但是此时里面根本就没有初始化,索引0对应的是哪块区域,索引1对应的是哪块区域,根本就没有划分出来,于是,用索引0去寻找a[0]这个元素的时候,会发现什么都找不到。因为根本就没有a[0]这个元素。对应于下面的一维数组,同样也是如此。
int ] c = { };
System.out.println("c.length: " + c.length); //打印0
System.out.println(c[0]); // ArrayIndexOutOfBoundsException

int[] d = new int[10];
System.out.println("d.length: " + d.length); //打印10
System.out.println(d[0]); //打印0
  • 对于int[ ][ ] b = {{ }}。同样的,我们如果把一行看作一个元素的话,里面有一个空的括号,表示该行什么元素都没有,但是与int[ ][ ] a = { }不同的是,虽然b里面第一个元素为空,但是b为第一行的元素也就是b[0]已经分配了一块地址,它告诉程序员:“好了,我已经为第一行的元素腾出来一块空间,你赶紧把元素放进来吧。"虽然此时的b[0]里面没有放任何元素,但是起码b[0]是有名有姓的。所以b[0].length不会出错。
    而int[ ][ ] a = { }却根本就没有为a[0]这个元素开辟空间,连a[0]是谁,对于a这个二维数组而言都不知道。所以用a[0].length会出错。

二维数组的声明

声明二维数组时,可以不声明列,但不能不声明行

如下的几种声明二维数组的格式都是正确的:
在这里插入图片描述

二维的List

类比于上面的二维数组,二维的List就可以这么写:

List<List<Integer>> list = new ArrayList<>();
list.get(0).add(1); //为二维list里面的第一个list添加一个元素1
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值