最直接高效的方式是用一次for循环遍历数组,用两个变量分别记录最大值和最小值;初始化为arr[0],从索引1开始遍历,逐个比较更新。

Java 查找数组中最大值和最小值,最直接的方式是遍历数组,逐个比较。不需要额外工具类,基础循环就能搞定,关键在于初始化和比较逻辑要写对。
用 for 循环一次遍历同时找最大值和最小值
这是效率最高的方式:只遍历一遍,用两个变量分别记录当前找到的最大值和最小值。
- 初始化时,建议用数组第一个元素(
arr[0])作为初始值,避免假设数值范围 - 从索引
1开始遍历,减少一次无意义的自比 - 每次比较更新
max和min,互不影响
示例代码:
int[] arr = {3, 1, 9, 4, -2, 7};
if (arr.length == 0) {
throw new IllegalArgumentException("数组不能为空");
}
int max = arr[0];
int min = arr[0];
for (int i = 1; i max) max = arr[i];
if (arr[i]
用 Arrays.stream()(Java 8+)简洁写法
适合追求可读性或配合其他流操作的场景,底层仍是遍历,但代码更紧凑。
-
IntStream.max()和IntStream.min()返回OptionalInt,需注意空数组情况 - 调用
orElseThrow()或orElse(0)处理空值,推荐显式抛异常
示例:
int[] arr = {3, 1, 9, 4, -2, 7};
if (arr.length == 0) {
throw new IllegalArgumentException("数组不能为空");
}
int max = Arrays.stream(arr).max().orElseThrow();
int min = Arrays.stream(arr).min().orElseThrow();
处理引用类型数组(如 Integer[])
如果数组是包装类型,不能直接用 Arrays.stream() 得到原始流,需注意装箱/拆箱和 null 安全。
- 用
Arrays.stream(arr).mapToInt(Integer::intValue)转成IntStream - 若数组可能含
null,先过滤:.filter(Objects::nonNull) - 或改用传统 for 循环,手动判 null 更可控
边界情况别忽略
实际写代码时,这几个点容易出错:
- 空数组:不检查会触发
ArrayIndexOutOfBoundsException或NoSuchElementException - 单元素数组:循环从 1 开始没问题,max 和 min 都是它自己
- 所有元素相同:逻辑依然成立,无需特殊处理
- 整型溢出?一般不用考虑——找极值不涉及运算,只做比较
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











