java中锯齿数组是数组的数组,每行长度可不同;声明时只指定行数,再逐行分配内存,如int[][] jagged = new int[3][];,支持{ {1,2}, {3,4,5,6,7}, {8,9,10} }简写初始化。

Java 中的多维数组默认是矩形的(即每行长度相同),但可以通过“不规则数组”(也称锯齿数组,Jagged Array)实现每行长度不同的结构。这本质上是**数组的数组**——一维数组中每个元素是一个独立的一维数组,长度可各不相同。
声明与初始化锯齿数组
关键在于:先声明外层数组,再为每一行单独分配内存。
- 声明时只指定外层数组大小(行数),不指定列数:
int[][] jagged = new int[3][]; - 逐行为内层数组分配不同长度:
jagged[0] = new int[2]; // 第0行:2个元素jagged[1] = new int[5]; // 第1行:5个元素jagged[2] = new int[3]; // 第2行:3个元素 - 也可用简写方式一次性初始化:
int[][] jagged = {<br> {1, 2},<br> {3, 4, 5, 6, 7},<br> {8, 9, 10}<br> };
访问与遍历锯齿数组
不能直接用 array[i].length 以外的方式假设列数一致;必须对每行单独检查长度。
- 安全访问元素:
if (j - 推荐使用增强 for 循环(避免下标越界):
for (int[] row : jagged) {<br> for (int val : row) {<br> System.out.print(val + " ");<br> }<br> System.out.println();<br> }
常见注意事项
锯齿数组灵活,但也容易出错。
- 某行未初始化时值为
null,直接访问会抛NullPointerException,使用前建议判空:if (jagged[i] != null) - 不能用
jagged.length当作“总元素数”,它只是行数;总元素数需遍历累加:int total = Arrays.stream(jagged).mapToInt(arr -> arr.length).sum(); - 不支持类似
int[][] arr = new int[3][4]这种矩形语法来创建锯齿结构——那会强制所有行长度为 4。
适用场景举例
锯齿数组适合表示天然不等长的数据结构:
- 杨辉三角(第 i 行有 i+1 个元素)
- 稀疏矩阵的非零元素按行存储
- 树的邻接表表示(每个节点的子节点数量不同)
- 分组数据:如
String[][] groups = {{"Alice","Bob"},{"Charlie"},{"Diana","Eve","Frank"}};
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











