java中查找数组最大值和最小值的核心思路是遍历比较,推荐用首元素初始化max和min,从索引1开始循环,一次遍历同步更新,时间复杂度o(n),空间o(1)。

Java 中查找数组最大值和最小值,核心思路是遍历数组并比较每个元素。关键在于初始化、边界处理和效率选择。
基础遍历法(推荐初学者)
适用于所有类型数组(int、double 等),逻辑清晰,不易出错。
- 用第一个元素初始化 max 和 min,避免设为固定极值(如 Integer.MIN_VALUE)导致全负数时出错
- 从索引 1 开始循环,减少一次比较
- 一次遍历同时更新两个值,时间复杂度 O(n),空间 O(1)
示例(int 数组):
int[] arr = {3, -5, 12, 0, 8};
if (arr.length == 0) throw new IllegalArgumentException("数组为空");
int max = arr[0], min = arr[0];
for (int i = 1; i max) max = arr[i];
if (arr[i]
使用 Arrays.stream(Java 8+)
适合已有 Stream 基础或需链式操作的场景,代码简洁但略有开销。
- IntStream 提供 max() / min() 方法,返回 Optional,需注意空数组情况
- 对引用类型数组(如 String[])可用 Arrays.stream().max(Comparator) 形式
示例:
int[] arr = {3, -5, 12, 0, 8};
OptionalInt maxOpt = Arrays.stream(arr).max();
OptionalInt minOpt = Arrays.stream(arr).min();
int max = maxOpt.orElseThrow(); // 抛异常或设默认值
int min = minOpt.orElseThrow();
处理对象数组(如 Integer[])
注意装箱/拆箱与 null 安全,避免 NullPointerException。
- 不能直接用 Arrays.stream(arr).mapToInt(Integer::intValue),若含 null 会报错
- 建议先过滤 null:Arrays.stream(arr).filter(Objects::nonNull).mapToInt(Integer::intValue)
- 或手动遍历时加 null 判断
多维数组找极值
本质是降维处理,可嵌套循环或展平后处理。
- 二维 int[][]:外层循环行,内层循环列,逐个比较
- 用 Java 8 可写成 Arrays.stream(arr).flatMapToInt(Arrays::stream).max()
- 注意:flatMapToInt 仅适用于 int[][];Object[][] 需额外类型转换
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











