应按需选择遍历方式:需索引时用传统for循环,需元素值时用for-each,需修改集合时用迭代器;避免在循环体内进行低效操作,确保逻辑清晰可维护。

高效遍历一维数组,关键不是追求“最快”的语法,而是选对方式、避开陷阱、让逻辑清晰可维护。真正拖慢性能的往往不是循环本身,而是循环体内的低效操作。
按需选择遍历方式:别为简洁牺牲功能
三种主流方式各司其职,强行混用反而埋坑:
- 需要索引(比如找最大值位置、交换首尾、比较相邻元素)→ 必须用传统 for (int i = 0; i
- 只读取每个值,且不关心下标(如累加、打印、校验)→ 优先用增强 for:for (int x : arr),代码短、不易越界
- 要做过滤、映射、聚合等链式操作(如“找出所有偶数并平方求和”)→ 才考虑 Arrays.stream(arr).filter(...).map(...).sum();小数组上它比传统循环慢,别为“看起来高级”滥用
传统 for 循环:写对比写快更重要
看似简单,但细节决定健壮性:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 边界条件统一用 i ,别写
i ——后者易手误漏等号或写错括号,且空数组时逻辑更难验证 - arr.length 是 final 字段,访问极快,现代 JVM 会优化,无需提前缓存到局部变量(除非你用 profiler 确实测出它是瓶颈,这种情况极罕见)
- 允许在循环中安全修改元素:arr[i] = newValue 没问题;但注意:改的是值,不是长度,数组容量永远不变
增强 for 循环:简洁有前提
它省去了索引管理,但带来明确限制:
-
数组不能为 null,否则运行时直接抛
NullPointerException;使用前务必判空:if (arr != null) { for (int x : arr) { ... } } - 循环变量 x 是元素副本,对 x 赋值(如
x = 0)不会改变原数组;基本类型如此,引用类型也只能调用方法,不能让 x 指向新对象来替换原数组中的引用 - 无法获取当前索引,也不支持反向或跳过遍历;一旦需求超出“顺序读取”,就得退回传统 for
调试与辅助:少写循环,多用工具
实际开发中,很多“遍历”动作其实可以跳过手写循环:
- 打印内容 → 直接用 Arrays.toString(arr),比写 for 输出可读性强十倍,且自动处理 null 和空数组
- 批量赋值 → Arrays.fill(arr, 99) 一行替代整个循环
- 排序或比较 → Arrays.sort(arr) 或 Arrays.equals(a, b),底层高度优化,远胜手写冒泡或逐个比对
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










