不规则二维数组是“一维数组的数组”,每行长度可不同甚至为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 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 外层循环只控行:
for (int i = 0; i - 进入内层前必判空:
if (arr[i] != null) - 内层上限取当前行长度:
for (int j = 0; j ,绝不用 <code>arr[0].length
按列遍历:先求最大列宽,再逐列检查
不规则数组没有统一列数,不能直接套用规则数组的列优先写法。需两步:
立即学习“Java免费学习笔记(深入)”;
- 第一遍扫描求最大列数:
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),内部完成全部校验并返回默认值

















