不规则二维数组按列遍历需先求最大列数maxcolumn,再对每列c遍历各行r,仅当r

Java中处理不规则二维数组(也叫锯齿数组)的遍历,核心在于每行长度独立、不能假设列数统一。直接套用规则矩阵的列优先逻辑会触发 IndexOutOfBoundsException。关键不是“怎么写循环”,而是“怎么安全地定义列边界”和“如何逐列访问存在元素的位置”。
明确不规则数组的本质
不规则数组是“数组的数组”,外层数组每个元素都是一维数组引用,各行长度可完全不同。例如:
int[][] jagged = {
{1, 2, 3},
{4, 5},
{6},
{7, 8, 9, 10}
};
它没有统一的“列数”,只有最大列数(本例为4),且第1列(索引1)只在第0、1、3行存在,第2列只在第0、3行存在。
按列遍历需先确定列范围
不能用 array[0].length 代表总列数,必须扫描所有行,找出最长行的长度:
- 遍历外层数组,记录
maxColumn = Math.max(maxColumn, row.length) - 若数组为空或某行为
null,需跳过或提前校验 - 得到
maxColumn后,外层循环列索引从0到maxColumn - 1
列内遍历时必须逐行检查边界
对每一列 c,遍历所有行 r 时,不能直接访问 array[r][c],必须先判断该行是否存在第 c 列:
- 检查
r - 仅当条件成立才读取元素,否则跳过(或填默认值如 0 / null)
- 避免把
array[r]当作非空——某些行可能初始化为null
完整安全的列优先遍历示例
以下代码可处理含 null 行、空数组、长度差异大的真实场景:
if (array == null || array.length == 0) return; int maxColumn = 0; for (int r = 0; r <p>输出效果对应每列所有有效元素竖向排列,缺失位置自动跳过,不报错也不填充。</p>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











