java不规则二维数组本质是一维数组的数组,每行长度可不同甚至为null;访问前必须分两步校验:行索引合法且该行非null且列索引有效;遍历时需逐行取length,按列遍历需先求最大列宽;初始化时须显式分配每行,避免null引用。

Java 中所谓“不规则二维数组”本质是 一维数组的数组,每行长度可不同,甚至某行为 null。它没有统一行列结构,因此边界校验不能套用矩阵思维——必须逐层、逐行、逐点确认有效性。
访问前必须分两步校验索引
写 arr[i][j] 之前,缺一不可:
- 检查行索引合法:
i >= 0 && i - 检查该行非空且列索引有效:
arr[i] != null && j >= 0 && j
漏掉任一条件都可能触发 NullPointerException(因 arr[i] 为 null)或 ArrayIndexOutOfBoundsException(因越出该行真实长度)。
遍历时别硬编码列数,每行单独取 length
错误写法:for (int j = 0; j —— 若第一行为空、或某行更短,就会出错。
正确做法:外层循环按 arr.length 走,进入内层前先判空,再用 arr[i].length 做上限:
for (int i = 0; i-
if (arr[i] != null) { -
for (int j = 0; j -
} }
按列遍历需先算最大列宽,再逐行检查
不规则数组没有“统一列数”,不能直接用 arr[0].length 当外层上限。
安全步骤:
- 先扫描一遍求最大列数:
int maxCols = 0; for (int[] row : arr) if (row != null) maxCols = Math.max(maxCols, row.length); - 外层循环列索引:
for (int col = 0; col - 内层对每行判断:
if (rowIdx ,满足才访问
初始化阶段就要防 null,别留隐患
声明 int[][] arr = new int[5][]; 后,所有 arr[i] 默认为 null。此时任何 arr[i][j] 都会立即抛空指针。
务必显式分配每行:
arr[0] = new int[2];arr[1] = new int[5];arr[2] = new int[0]; // 允许空行,但非 null
若某行允许为空逻辑,也应明确赋值 new int[0],而非保留 null。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











