查找数组最大值需遍历并更新当前最大值,初始化为arr[0],从索引1开始比较;必须校验null或空数组以避免异常;增强for循环更简洁安全;Stream API可一行实现但需显式处理空数组。

查找数组中的最大值,核心在于遍历每个元素并持续更新当前找到的最大值。不需要额外数据结构,一次循环就能完成,关键是要正确初始化比较基准。
用第一个元素做初始最大值
避免用0或负无穷作为初始值——如果数组全是负数,0就会导致错误结果。最稳妥的方式是把数组第一个元素当作初始最大值,再从第二个元素开始比较。
- 声明一个变量(如max),赋值为arr[0]
- 用for循环从索引1开始遍历剩余元素
- 每次比较arr[i] > max,成立则更新max = arr[i]
处理空数组或null的边界情况
实际开发中必须考虑异常输入。直接访问arr[0]前,要先检查数组是否为null或长度为0,否则会抛出NullPointerException或ArrayIndexOutOfBoundsException。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 加判断:if (arr == null || arr.length == 0),可抛出异常或返回特殊值(如Integer.MIN_VALUE)
- 不建议静默返回0,容易掩盖逻辑问题
增强for循环写法更简洁
如果不需要索引,用增强for循环(for-each)语义更清晰,代码更安全,也自动规避了越界风险。
立即学习“Java免费学习笔记(深入)”;
- 初始化max = arr[0]后,用for (int num : arr)遍历
- 注意:仍需提前校验数组非空,否则增强for在空数组上不会执行循环体,但max还是用了未定义的arr[0]
结合Stream API(Java 8+)一行解决
函数式写法适合链式操作或配合其他转换,但要注意空数组会抛出NoSuchElementException。
- OptionalInt maxOpt = Arrays.stream(arr).max();
- 用maxOpt.orElseThrow(() -> new IllegalArgumentException("Empty array"))显式处理空情况
- 性能略低于传统循环,但可读性强,适合复杂数据处理场景

















