java中查找数组最大最小值的最优方法是单次遍历,时间复杂度o(n)、空间复杂度o(1),用两个变量分别记录并更新最大值和最小值,初始化为首个元素(需判空),从索引1开始遍历比较更新。

Java 中数组查找最大最小值最常用且高效的方式是遍历一次,时间复杂度 O(n),空间复杂度 O(1)。不需要排序或额外数据结构,简单直接。
单次遍历同时获取最大值和最小值
只需一个 for 循环,用两个变量分别记录当前最大值和最小值,边遍历边更新。这是最优解,避免重复遍历或调用多次 Math.max/Math.min。
- 初始化 max 和 min 为数组第一个元素(注意空数组需判空)
- 从索引 1 开始遍历剩余元素
- 每次比较:若当前元素 > max,则更新 max;若当前元素
使用 Java 8 Stream API(适合简洁写法,但性能略低)
适用于代码可读性优先、数组不大或已有流式处理逻辑的场景。底层仍是遍历,但有装箱开销和对象创建成本。
- int[] arr = {3, 1, 4, 1, 5};
- OptionalInt max = Arrays.stream(arr).max();
- OptionalInt min = Arrays.stream(arr).min();
- 记得检查 OptionalInt.isPresent(),避免 NoSuchElementException
利用 Collections 工具类(仅限包装类型数组)
对 Integer[] 等引用类型数组,可转为 List 后调用 Collections.max/min,但涉及装箱、List 创建,不推荐用于基本类型或性能敏感场景。
- Integer[] boxed = Arrays.stream(arr).boxed().toArray(Integer[]::new);
- int max = Collections.max(Arrays.asList(boxed));
- 比原始遍历多出至少两次遍历(stream + collection),效率更低
边界情况与健壮性处理
实际使用中容易忽略空数组、单元素数组、整型溢出等细节。
- 空数组必须提前判断,否则下标越界或 Optional 抛异常
- 单元素数组时,max 和 min 相同,无需特殊逻辑,常规遍历自然兼容
- 若数组元素可能超 int 范围(如 long 值),应选用 long 类型变量存储 max/min
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











