不规则二维数组是“一维数组的数组”,每行长度可不同甚至为null;创建需显式初始化各行,遍历时须先判空再取长,推荐用带防护的双层for循环。

Java 不规则二维数组不是“矩形矩阵”,而是“一维数组的数组”,每行长度可不同,甚至某行为 null。处理它的核心不是套用规则数组思维,而是始终把“每行独立”作为前提——访问前判空、取长时看当前行、遍历时不假设统一列数。
创建:外层定行,内层逐行分配
声明后必须显式初始化每一行,否则默认为 null,直接访问会抛 NullPointerException:
- 动态方式:
int[][] arr = new int[4][];→ 再分别赋值:arr[0] = new int[3]; arr[1] = new int[1]; arr[2] = new int[0]; arr[3] = null; - 静态方式:
int[][] arr = {{1,2}, {3}, {}, {4,5,6,7}};→ 长度由每组花括号内元素个数决定,空花括号生成长度为 0 的数组 - 建议避免留
null行;若该行无数据,用new int[0]替代,使arr[i].length始终可安全调用
安全遍历:传统 for 循环最可靠
需要索引、要修改元素或逻辑复杂时,双层 for 是首选。关键在两处防护:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 外层循环只控行:
for (int i = 0; i - 进入内层前必判空:
if (arr[i] != null) - 内层上限取当前行长度:
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); - 第二遍按列输出:
for (int c = 0; c
边界与邻居访问:每次索引都单独校验
尤其在算法题中处理“上下左右”邻居时,不能批量写 arr[i-1][j] 等表达式:
- 对每个偏移方向,先算新坐标:
int ni = i + dx, nj = j + dy; - 再分别验证:
ni >= 0 && ni = 0 && nj - 可封装为工具方法:
safeGet(arr, i, j, -1),内部完成全部校验并返回默认值
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










