小言_互联网的博客

关于二维数组的一点见识

450人阅读  评论(0)

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

转载:https://blog.csdn.net/qq_42799615/article/details/105519048
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场