java一维数组遍历核心在于服务后续逻辑,需据需求选方式:传统for适合索引操作与修改,增强for适合只读遍历,stream api适合链式处理;务必防御空数组、越界及整数除法截断等问题。

Java 一维数组遍历不是为了“走一遍”,而是为后续的条件判断、筛选或计算服务。选对遍历方式,才能让过滤逻辑清晰、安全、高效——尤其当你要保留偶数、剔除负值、统计达标人数时。
需要按位置操作或修改元素?用传统 for 循环
当你得知道当前是第几个元素、要改原数组、或做前后对比(比如找峰值、去重相邻重复),传统 for 是唯一可靠选择。
- 索引从 0 开始,上限是 arr.length - 1,越界直接抛异常
- 倒序遍历写法:for (int i = arr.length - 1; i >= 0; i--)
- 过滤并原地压缩(如剔除负数):需双指针,先遍历识别,再移动有效元素
只读取、逻辑简单?优先选增强 for(for-each)
代码干净、不易越界,适合纯遍历+条件判断后收集结果(比如把所有大于 60 的分数放进 List)。
- 语法简洁:for (int x : arr) { if (x > 60) list.add(x); }
- 注意:x 是副本,x = 0 不会影响 arr[i]
- 不能获取下标,也不能在循环中 remove 或 add 到正在遍历的集合
要链式过滤+转换+聚合?上 Stream API
一行代码完成“取正数→平方→求和”这类多步操作,语义明确,且天然支持并行。
- 基本过滤:Arrays.stream(arr).filter(x -> x > 0).toArray()
- 关键细节:int[] 必须用 Arrays.stream(arr),不能用 Stream.of(arr)(后者会把整个数组当一个元素)
- 求平均值别写 sum / arr.length——整数除法会截断,改用 IntStream.average().orElse(0.0)
空数组和边界值,必须提前防御
很多 bug 不出在逻辑,而出在没兜底。
- 调用 arr[0] 或 Arrays.stream(arr).findFirst() 前,先判 arr.length == 0
- 找最大/最小值别初始化为 0 或 Integer.MAX_VALUE——全负数时失效;稳妥做法是用第一个元素初始化,或用 Stream.max(Comparator.naturalOrder())
- 打印数组别直接 System.out.println(arr)——输出的是地址;要用 Arrays.toString(arr)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











