java二维数组行遍历需外层循环控行、内层循环控列,按行整体判断过滤条件,用arraylist动态存储满足规则的整行数据。

Java 中二维数组的行遍历是批量过滤数据的基础操作,关键在于明确“按行处理”的逻辑边界,避免误将列索引当作行索引,或混淆内外层循环职责。
明确二维数组结构与遍历方向
Java 二维数组本质是“数组的数组”,arr[i] 表示第 i 行(一维数组),arr[i][j] 才是第 i 行第 j 列的元素。行遍历即外层循环控制行号 i,内层循环遍历该行所有列 j。
- 声明示例:int[][] data = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; —— 共 3 行,每行长度可不一致
- 正确行遍历结构:
for (int i = 0; i
- 错误写法:用 data.length 同时约束内外层循环 —— 会导致越界或漏数据(尤其当各行长度不同时)
基于行规则实现批量过滤
所谓“行级过滤”,是指以整行为单位判断是否保留:某行满足条件则整行进入结果集,否则跳过。常见规则包括“行内最大值 > 10”、“行中存在负数”、“行和为偶数”等。
- 定义过滤规则接口或方法,例如:
boolean keepRow(int[] row) { return Arrays.stream(row).max().orElse(0) > 5; } - 构建新二维数组或 List 存储结果(推荐 ArrayList
,避免提前预估容量): - 遍历时只对 data[i] 调用规则,不深入单个元素(除非规则本身需逐元素计算):
- 示例代码片段:
List<int> filtered = new ArrayList(); for (int i = 0; i </int>
处理不规则二维数组与空行
真实场景中二维数组常出现“锯齿状”(每行长度不同)或含 null 行,直接调用 data[i].length 或 stream() 可能抛 NullPointerException。
- 安全遍历模板:
for (int i = 0; i
- 空行过滤建议:在 keepRow() 中首行判空,如 if (row == null || row.length == 0) return false;
- 避免使用传统 for-each 遍历二维数组做行过滤——无法获取行索引,难以构造新结构或记录位置信息
性能与内存优化提示
大数据量下,频繁创建新数组或装箱操作会增加 GC 压力。行遍历过滤应尽量减少中间对象生成。
- 复用原数组引用(若无需深拷贝):add(data[i]) 比 add(data[i].clone()) 更轻量
- 预估容量提升 ArrayList 性能:new ArrayList(data.length)(即使部分行被过滤,也比默认容量更优)
- 如需流式处理且规则简单,可用 Stream API,但注意 Arrays.stream(data) 得到的是 Stream
,适合行级操作: - Arrays.stream(data) .filter(Objects::nonNull) .filter(row -> Arrays.stream(row).anyMatch(x -> x
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











