Java 多维数组详解

一、本质

Java 没有真正的多维数组,多维数组 = 数组里存数组,属于数组的数组,每一层都是独立引用。

二、二维数组(最常用)

1. 静态初始化

// 写法1int[][]arr1={{1,2},{3,4,5},{6}};// 写法2intarr2[][]={{10,20},{30}};

特点:每行长度可以不一样(不规则二维数组)。

2. 动态初始化

规则行列固定
// 3行2列int[][]arr=newint[3][2];arr[0][0]=1;
只指定行数,列后期分配(不规则)
int[][]arr=newint[3][];arr[0]=newint[2];arr[1]=newint[4];arr[2]=newint[1];

三、三维数组

// 2层3行4列int[][][]arr=newint[2][3][4];int[][][]a={{{1},{2}},{{3,4}}};

四、遍历多维数组

1. 普通for循环(二维)

int[][]arr={{1,2},{3,4,5}};for(inti=0;i<arr.length;i++){for(intj=0;j<arr[i].length;j++){System.out.print(arr[i][j]+" ");}System.out.println();}

2. 增强for循环

for(int[]row:arr){for(intnum:row){System.out.print(num+" ");}}

五、长度获取

int[][]arr={{1,2},{3,4,5},{6}};arr.length;// 外层长度:行数 3arr[0].length;// 第0行的列数 2arr[1].length;// 第1行的列数 3

六、复制多维数组注意点

clone()/System.arraycopy()/Arrays.copyOf只浅拷贝外层,内层数组共享地址:

int[][]a={{1,2},{3,4}};int[][]b=a.clone();b[0][0]=99;// a[0][0] 同步修改

想要完整深拷贝,必须双层循环逐行复制。

七、和C++多维数组核心区别

  1. Java 是数组套数组,每行长度可不同;C++静态多维数组内存连续,行列固定。
  2. Java 多维数组存堆,变量是引用;C++栈数组直接分配连续内存。
  3. Java 浅拷贝只复制外层引用;C++静态二维数组 memcpy 可整块深复制。

八、常用场景

矩阵运算、表格数据、棋盘、图像像素存储等。