java数组遍历是算法基础,但高级性体现在遍历中嵌入的逻辑设计;依问题类型选择遍历方式:需索引时用传统for循环,只读场景优先增强for循环,函数式处理用stream api,调试时善用arrays工具类。

Java 数组遍历本身不直接等于算法,但它是绝大多数数组相关算法的底层支撑动作。真正体现“高级”的,是遍历过程中嵌入的逻辑设计——比如边遍历边筛选、累积、映射、状态判断或原地修改。实际开发中,选择哪种遍历方式,取决于你要解决的问题类型,而非单纯追求“高级”。
需要索引参与计算时:用传统 for 循环
当操作依赖位置信息(如奇偶下标处理、相邻元素比较、滑动窗口、双指针),必须使用带索引的 for 循环。
- 查找峰值元素(局部最大):遍历中比较 nums[i] 与 nums[i-1]、nums[i+1]
- 原地去重(有序数组):用快慢指针 i 和 j,仅当 nums[j] != nums[i] 时才赋值并移动 i
- 旋转数组查找目标值:先二分找转折点,再根据 target 范围决定在左段还是右段二分——两次遍历逻辑都基于索引偏移
只需逐个读取元素时:优先选增强 for 循环
适用于统计、校验、简单转换等只读场景,代码更安全、简洁,自动规避越界风险。
- 计算数组所有元素之和、平均值、最大值/最小值
- 判断是否全部为正数、是否存在重复字符串(配合 HashSet)
- 将 int[] 转为 Integer[] 或映射为 List
(如数字转中文描述)
涉及过滤、转换、聚合或并行处理时:用 Stream API
Stream 不是对数组“遍历”,而是构建处理管道;它把遍历隐含在中间操作中,语义更清晰,适合函数式风格。
- 筛选偶数并平方:Arrays.stream(arr).filter(x -> x % 2 == 0).map(x -> x * x).toArray()
- 统计各字符出现频次(配合 Map::merge):Arrays.stream(str.split("")).collect(Collectors.groupingBy(c -> c, Collectors.counting()))
- 大日志数组并行解析:Arrays.stream(logs).parallel().map(LogParser::parse).filter(Objects::nonNull).forEach(System.out::println)
打印调试与快速验证:别手写循环,用 Arrays 工具类
开发阶段高频需求不是“遍历”,而是“看清内容”。反复写循环打印既低效又易错。
- 一维数组:直接 System.out.println(Arrays.toString(arr))
- 二维数组:用 Arrays.deepToString(arr2D),避免输出类似 [[I@7852e922
- 自定义对象数组:确保重写了 toString(),否则仍需手动格式化
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











