最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java不规则二维数组的创建与遍历实战手册
时间:2026-06-18 08:28:52 编辑:袖梨 来源:一聚教程网
Java不规则二维数组是“一维数组的数组”,每行长度可不同甚至为null;正确创建需外层分配行数、内层逐行分配列数;遍历时必须先判空再取长,否则易触发NullPointerException或ArrayIndexOutOfBoundsException。
Java不规则二维数组(又称“锯齿数组”)不是固定行列的矩阵,而是“一维数组的数组”,每行长度可不同,甚至某行为 null。创建和遍历时若按规则数组逻辑硬套,极易触发 NullPointerException 或 ArrayIndexOutOfBoundsException。核心原则就一条:**每次访问子数组前,必须先判空;每次取长度或下标前,必须确认该行存在且足够长。**
如何正确创建不规则二维数组
创建方式灵活,关键在明确“外层分配行数、内层逐行分配列数”:
-
静态初始化:直接用花括号定义各行,长度由元素个数自动决定
int[][] jagged = { {1, 2, 3}, {4, 5}, {}, {6, 7, 8, 9} };
第三行为空数组(length == 0),第四行长度为 4。 -
动态初始化:先声明外层数组,再逐行
new子数组String[][] users = new String[3][];users[0] = new String[2]; // 行0:2列users[1] = new String[5]; // 行1:5列users[2] = null; // 行2:显式设为null,合法但需遍历时注意 - 混合使用:部分行静态赋值,部分行动态扩展,适合运行时结构不确定的场景
安全遍历:传统 for 循环是首选
需要索引、要修改元素、或逻辑复杂时,传统双层 for 最清晰可控:
- 外层循环判断
i ,确保不越行 - 每轮进入内层前加
if (arr[i] != null),防止对null行调用.length - 内层条件写
j ,而非 <code>arr[0].length——后者在不规则数组中无意义
示例代码:
立即学习“Java免费学习笔记(深入)”;
for (int i = 0; i < arr.length; i++) {<br> if (arr[i] != null) {<br> for (int j = 0; j < arr[i].length; j++) {<br> System.out.print(arr[i][j] + " ");<br> }<br> }<br> System.out.println();<br>}
简洁遍历:增强 for 循环需谨慎使用
适合只读、语义清晰、不依赖行列索引的场景,但对 null 更敏感:
- 外层类型必须是
int[] row : arr(不能写成int x : arr) -
row是引用,必须先判空:if (row != null),否则for (int x : row)直接报错 - 无法获知当前是第几行第几列,不适合需要定位的逻辑
示例代码:
立即学习“Java免费学习笔记(深入)”;
for (int[] row : arr) {<br> if (row != null) {<br> for (int x : row) {<br> System.out.print(x + " ");<br> }<br> }<br> System.out.println();<br>}
按列遍历:先求最大列宽,再逐列检查
不规则数组没有统一列数,不能假设所有行都有第 c 列。安全做法分两步:
-
第一遍扫描:遍历所有非
null行,计算最大列数int maxCols = 0;<br> for (int[] row : arr) {<br> if (row != null) maxCols = Math.max(maxCols, row.length);<br> } -
第二遍输出:外层循环列索引
c从0到maxCols - 1,内层遍历每行r,仅当arr[r] != null && c 时才访问 <code>arr[r][c]
这样能保证每列输出“视觉对齐”,跳过缺失位置,不中断流程。
相关文章
- OpenAI 硬件路线图曝光:第一台硬件没有屏幕,手机 2027 上半年量产 07-31
- 国产大模型,贵到用不起 07-31
- 《王者荣耀》团战雷达解析-赛年标签含义详解 07-31
- 《逐鹿天下手游技能加点攻略》(技能加点策略大揭秘!一文教你玩转逐鹿天下!) 07-31
- 《王者荣耀》艾琳专精装解析-提升普攻与暴击率优势 07-31
- 怎样在Ubuntu VirtualBox中安装Windows 07-31