Java 多维数组详解

一、本质

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

二、二维数组(最常用)

1. 静态初始化

java 复制代码
// 写法1
int[][] arr1 = {{1,2},{3,4,5},{6}};

// 写法2
int arr2[][] = {{10,20},{30}};

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

2. 动态初始化

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

三、三维数组

java 复制代码
// 2层3行4列
int[][][] arr = new int[2][3][4];
int[][][] a = {{{1},{2}},{{3,4}}};

四、遍历多维数组

1. 普通for循环(二维)

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

2. 增强for循环

java 复制代码
for (int[] row : arr) {
    for (int num : row) {
        System.out.print(num + " ");
    }
}

五、长度获取

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

六、复制多维数组注意点

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

java 复制代码
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 可整块深复制。

八、常用场景

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

相关推荐
2601_962106644 小时前
【Java Set综合实战】商品管理系统 + 图书收藏系统|Product、Book自定义类全套代码
java
RuoyiOffice5 小时前
SpringBoot+Vue3 凭证生命周期设计:审核、过账、冲销与反过账怎样保持账目一致
java·spring boot·事务·springboot3·财务系统·会计凭证·ruoyi office
2601_962106645 小时前
HashMap入门|工号-姓名键值存储、两种遍历方式、根据key/value查
java
czq_26867194876 小时前
Python打卡第46天
开发语言·python
杨凯凡6 小时前
Spring Framework 7 API 版本管理实战:请求头路由、兼容迁移与废弃策略
java·rest api·springframework·spring boot 4·api版本管理
T_Wizard6 小时前
同一个问题写了 4 遍:官方 SDK / HTTP / Spring AI / LangChain4j,到底该选哪个
java·ai编程
hai_android6 小时前
AudioTrack 深度解析:从原理到实战
android·java·kotlin
斯维赤7 小时前
限流、熔断、降级,你真的分得清吗?
java·后端·架构
Evand J8 小时前
【MATLAB例程介绍】(17)永磁同步电机(PMSM)基于自适应无迹卡尔曼滤波(AUKF)的电流噪声在线估计。测量噪声协方差自适应与转速估计对比仿真
开发语言·matlab·卡尔曼滤波·无迹卡尔曼滤波·pmsm·电机滤波
BaiPeter9 小时前
ZPL文件预览
开发语言·c++