java遍历首选:索引操作用传统for,只读遍历用增强for;需修改、定位、反向等则用iterator/stream。传统for掌控索引,增强for简洁但无索引,iterator保障删除安全,stream适合函数式处理。

Java 中用 for 循环遍历,核心是根据数据结构特点选对方式:数组或 List 等支持索引的结构,优先用传统 for;只读遍历集合或一维数组,增强 for 更简洁安全;需要修改、定位、反向等操作,则必须回归传统 for 或换用 Iterator/Stream。
传统 for 循环:掌控索引,适用性强
这是最灵活的方式,能精确控制起始、终止、步长和下标访问,适合所有需位置信息或动态调整的场景。
- 遍历数组:用 i 判断边界,避免越界;反向遍历时写成 for (int i = arr.length - 1; i >= 0; i--)
- 遍历 ArrayList:可直接用 get(i),但 LinkedList 不建议,因 get(i) 是 O(n) 操作
- 边遍历边修改:比如把偶数索引位置的元素翻倍,list.set(i, list.get(i) * 2)
- 双指针操作:如反转数组、查找两数之和,必须依赖两个下标变量协同控制
增强 for 循环(for-each):语义清晰,专注元素本身
语法为 for (Type var : collectionOrArray),隐藏迭代细节,代码更直观,但牺牲了索引和修改能力。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 遍历数组:支持 int[]、String[] 等,但遇到 null 数组会直接抛 NullPointerException,使用前建议判空
- 遍历集合:适用于 ArrayList、HashSet、TreeSet 等实现了 Iterable 的类型,底层调用 iterator()
- 二维数组:必须嵌套两层,外层取行(int[] row),内层取单元格(int cell)
- 字符串处理:不能直接遍历 String,需先转成字符数组——for (char c : str.toCharArray())
什么时候不能用增强 for?
它不是万能的,以下情况必须换其他方式:
- 需要知道当前是第几个元素(比如“打印第3个值”或“跳过前两个”)
- 要在遍历中删除集合元素——直接 remove() 会触发 ConcurrentModificationException,应改用 Iterator.remove()
- 要修改基本类型数组的原值:写 for (int x : arr) { x *= 2; } 不会影响 arr,因为 x 是副本
- 反向遍历、按步长跳着走(如 i += 3)、中途重置循环位置等复杂控制逻辑
替代方案:按需升级遍历手段
当增强 for 和传统 for 都不够用时,这些方式更精准:
- Iterator:适合在遍历中安全删除元素,调用 iterator.remove() 不抛异常
- ListIterator:仅用于 List,支持 previous() 反向移动,还能在遍历时 add() 或 set()
- Stream API:适合做过滤、映射、聚合等链式处理,如 list.stream().filter(x -> x > 10).map(String::valueOf).collect(Collectors.toList())
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










