Java不规则二维数组遍历的关键是尊重每行独立长度并做安全校验:先判空和长度,再逐行检查非空后按其length遍历。

Java 不规则二维数组遍历的关键,不是强行统一列数,而是尊重每行的独立长度,并在每次访问前做安全校验。
按行遍历:最常用也最安全
这是默认推荐方式,逻辑清晰、不易出错。外层控制行索引,内层用当前行的 length 控制列范围。
- 先确认外层数组非空且长度合法:
if (arr == null || arr.length == 0) - 对每一行
i,先检查arr[i] != null,再取arr[i].length作为该行最大列索引 - 内层循环写成:
for (int j = 0; j ,不依赖 <code>arr[0].length或其他固定值
按列遍历:需先算最大列宽
当需要“视觉对齐”或按列聚合数据(如求每列和、转置等),不能直接套用规则矩阵逻辑。
- 第一步:扫描所有行,找出最大列数:
int maxCols = 0; for (int[] row : arr) if (row != null) maxCols = Math.max(maxCols, row.length); - 第二步:外层循环列索引
c从0到maxCols - 1 - 第三步:对每一列
c,遍历所有行r,访问前必须同时满足:r
初始化与判空:避免 NullPointerException 的前提
不规则数组中,某行可能为 null,尤其在动态分配后未全部初始化时。
立即学习“Java免费学习笔记(深入)”;
- 声明后未赋值的行默认是
null,例如:int[][] a = new int[3][];→a[0]、a[1]、a[2]全为null - 使用字面量初始化(如
{ {1}, {2,3}, {4,5,6} })不会产生null行,更安全 - 任何涉及
arr[i].length或arr[i][j]的操作,都必须前置arr[i] != null判断
替代方案:何时考虑 List>
当行/列长度频繁变化、需插入删除、或逻辑复杂时,原生数组反而增加维护成本。
-
List<list>></list>支持动态扩容、空行自然存在(可存null或空ArrayList) - 遍历时仍需判空,但无需手动管理内存分配,语义更明确
- 若性能敏感且结构稳定,数组更轻量;若开发效率和可读性优先,List 嵌套更直观


















