最高效的方式是用双指针法原地反转,时间复杂度o(n),空间复杂度o(1);适用于基本类型和引用类型数组,泛型方法可统一处理引用类型,但不支持基本类型;应避免新建数组、arraylist、stringbuilder或递归等低效方式。

最高效的方式是用双指针法原地反转,时间复杂度 O(n),空间复杂度 O(1),不创建新数组、不依赖额外类库。
双指针原地交换(推荐)
这是标准解法,适用于所有基本类型数组(如 int[]、char[])和引用类型数组(如 String[])。
- 定义两个索引:start = 0,end = arr.length - 1
- 当 start
- 交换后 start++、end--,继续下一轮
- 边界自动处理:null、长度为 0 或 1 的数组直接返回,不进入循环
泛型数组的原地反转
对引用类型数组(如 String[]、Integer[]),可用泛型方法统一处理:
- 声明为 public static
void reverse(T[] arr) - 内部逻辑与 int[] 完全一致,仅类型改为 T
- 注意:不能用于基本类型(如 int[]),因泛型不支持基本类型
避免低效方式
以下做法会降低效率或引入隐患:
- 新建数组逐个倒序赋值:多占一倍内存,空间复杂度升至 O(n)
- 转成 ArrayList 再调用 Collections.reverse():底层仍需装箱/复制,且对基本类型不适用
- 用 StringBuilder 处理字符串数组:只适合单个字符串反转,不是数组元素反转
- 递归实现:栈空间开销大,无必要,且易栈溢出
二维数组的行反转
若目标是让“第一行变最后一行”,即按行整体颠倒(不是转置),仍可用双指针:
- 操作对象是外层数组引用:交换 arr[start] 和 arr[end]
- 每行内部顺序不变,不复制元素,效率同样为 O(m),m 是行数
- 支持不规则二维数组(各行长度不同),安全可靠
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











