数组反转通过首尾交换实现,left从0、right从length-1开始,直到left≥right;求最值遍历一次,用max/min变量记录极值,初始值设为arr[0]。

Java 中实现数组反转和求最大最小值,核心在于理解数组索引操作和遍历逻辑。下面分两部分说明,直接给出实用、易懂的写法。
数组反转(原地反转)
反转数组不需要额外空间,只需首尾元素两两交换,直到中间位置即可。
- 定义两个指针:left 从 0 开始,right 从
arr.length - 1开始 - 循环条件:
left ,每次交换后 <code>left++、right-- - 注意:仅适用于引用类型数组或基本类型数组;字符串等不可变对象需转为字符数组再操作
示例代码:
public static void reverse(int[] arr) {
int left = 0, right = arr.length - 1;
while (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
求数组最大值与最小值
遍历一次数组即可同时拿到最大和最小值,避免两次循环,提升效率。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 初始化 max 和 min 为第一个元素(不能设为 0 或 Integer.MAX_VALUE/Integer.MIN_VALUE——除非确保数组非空)
- 从索引 1 开始遍历,逐个比较更新
- 若数组为空,应提前检查并抛异常或返回默认值
示例代码:
public static int[] getMaxAndMin(int[] arr) {
if (arr == null || arr.length == 0) {
throw new IllegalArgumentException("数组不能为空");
}
int max = arr[0], min = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) max = arr[i];
if (arr[i] < min) min = arr[i];
}
return new int[]{max, min}; // 返回 [最大值, 最小值]
}
使用 Arrays 工具类(简化写法)
如果只是快速获取结果,且不介意创建新数组或额外开销,可用 JDK 内置方法:
- 反转:用
Arrays.asList()转为 List 后调用Collections.reverse()(仅适用于对象数组,如Integer[];int[]不支持) - 最值:没有直接 API,但可借助
IntStream.of(arr).max().orElseThrow()等流式写法(JDK 8+) - 注意:工具类方法通常有装箱/拆箱或复制开销,对性能敏感场景建议手写循环
常见注意事项
实际编码中容易忽略的细节:
-
空数组或 null 检查必须做,否则运行时抛
NullPointerException或ArrayIndexOutOfBoundsException - 反转字符串时,先用
toCharArray()转成char[],反转后再构造新字符串 - 多维数组需按维度分别处理;上述方法只适用于一维数组
- 若需返回新数组而非原地修改,反转前先
Arrays.copyOf()复制一份

















