高效循环遍历关键在选对方式、避开陷阱、逻辑清晰:需下标用传统for,只读值用增强for,复杂操作才用Stream;注意边界、判空、不可修改索引等细节;优先使用Arrays工具方法。

高效循环遍历的关键不在“快”,而在“选对方式 + 避开陷阱 + 逻辑清晰”。真正影响性能的,往往不是循环语法本身,而是循环体内的操作和结构设计。
按需求选对遍历方式
不同场景适合不同结构,强行统一反而出错:
- 需要下标(如找最大值位置、交换首尾、比较相邻元素)→ 用传统 for (int i = 0; i < arr.length; i++)
- 只读取值、不关心索引(如求和、打印、校验)→ 优先用 增强 for 循环:for (int x : arr),代码短、不易越界
- 要做过滤、映射、聚合等链式处理(如“找出所有偶数并平方求和”)→ 才考虑 Arrays.stream(arr).filter(...).map(...).sum();小数组上它比传统循环慢,别为写法炫酷牺牲效率
传统 for 循环要注意细节
看似简单,但健壮性藏在细节里:
- 边界统一用 i < arr.length,不用 i <= arr.length - 1,后者易手误、空数组时更难验证
- arr.length 是 final 字段,访问极快,JVM 会优化,一般无需提前缓存到局部变量
- 可在循环中安全修改元素值:arr[i] = newValue;但注意:改的是内容,不是数组长度,容量永远不变
增强 for 循环有明确限制
它省事,但不能乱用:
立即学习“Java免费学习笔记(深入)”;
- 数组必须非 null,否则运行时直接抛 NullPointerException;使用前务必判空:if (arr != null) { for (int x : arr) { ... } }
- 循环变量 x 是元素副本,对 x 赋值(如 x = 0)不会改变原数组;基本类型如此,引用类型也只能调用方法,不能让 x 指向新对象来替换原引用
- 无法获取索引,也不支持反向、跳步或中途修改集合结构;一旦需求超出“顺序读取”,就得退回传统 for
能不写循环就不写
很多常见操作已有成熟工具方法,比手写循环更安全、可读性更强:
- 打印数组 → 直接用 Arrays.toString(arr),自动处理 null 和空数组,比 for 输出清晰十倍
- 批量赋值 → Arrays.fill(arr, 99) 一行替代整个循环
- 排序或查找 → 用 Arrays.sort(arr) 或 Arrays.binarySearch(arr, key),比手写冒泡或线性搜索更可靠


















