java中不存在“不规则数组”概念,所谓不规则数组实为行长度不同的二维数组(如int[][] arr = {{1,2}, {3}, {4,5,6,7}}),其越界风险更高,须坚持明确每维有效范围、拒绝凭经验假设索引安全两大原则。

Java中没有“不规则数组”这个语言概念,所谓不规则数组通常指二维数组中各行长度不同的情况,即 不等长二维数组(jagged array),例如 int[][] arr = {{1,2}, {3}, {4,5,6,7}};。它的越界风险比一维数组更高,因为每行的 length 独立且不统一。处理关键不是“特殊技巧”,而是坚持两个底层原则:明确每维的有效范围、拒绝凭经验假设索引安全。
确认每行真实长度再访问
不能假设所有行长度相同,也不能用总行数代替列数。访问 arr[i][j] 前必须分两步校验:
- 先检查行索引
i是否合法:i >= 0 && i - 再检查列索引
j是否在该行内:j >= 0 && j (注意:<code>arr[i]可能为null)
常见错误是只校验第一维,或直接写 arr[i][j] 而未判空——若某行未初始化(arr[1] = null),会触发 NullPointerException,而非越界异常。
遍历时用嵌套 for 循环,别硬套固定边界
避免使用类似 for (int j = 0; j 这种写死列数的循环。正确方式是为每一行单独确定上限:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
for (int i = 0; i-
if (arr[i] != null) { // 防空指针 -
for (int j = 0; j -
System.out.println(arr[i][j]); -
} -
} }
初始化时显式分配每行,避免默认 null
声明 int[][] arr = new int[3][]; 后,arr[0] 到 arr[2] 全为 null。此时任何 arr[i][j] 访问都会抛空指针。必须逐行初始化:
arr[0] = new int[2]; // 第一行2个元素arr[1] = new int[1]; // 第二行1个元素arr[2] = new int[4]; // 第三行4个元素
如果逻辑上某行不应存在数据,也建议设为 new int[0](空数组)而非留 null,这样 arr[i].length 始终可安全读取。
替代方案:考虑用 List> 封装
当行长度高度动态、频繁增删时,原生二维数组维护成本高。改用嵌套集合更安全:
List<list>> matrix = new ArrayList();</list>- 添加行:
matrix.add(new ArrayList(Arrays.asList(1, 2))); - 访问前检查:
if (i
集合的 size() 行为稳定,不会出现 null 行问题,且支持动态扩容,适合业务逻辑复杂场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










