arraylist 本身无 reverse() 方法,推荐用 collections.reverse() 原地反转,时间复杂度 o(n)、空间复杂度 o(1);也可手动双指针交换或用 stream 创建新列表。

Java 中的 ArrayList 本身没有内置的 reverse() 方法,但可以通过 Collections.reverse() 工具方法轻松实现原地反转。
使用 Collections.reverse()(推荐)
这是最简洁、高效且通用的方式,适用于所有实现了 List 接口的集合(包括 ArrayList)。
- 该方法直接修改原列表,不创建新对象,时间复杂度为 O(n),空间复杂度为 O(1)
- 要求列表是可修改的(非只读),否则会抛出
UnsupportedOperationException - 示例代码:
import java.util.*;
<p>List<string> list = new ArrayList(Arrays.asList("a", "b", "c"));
Collections.reverse(list);
System.out.println(list); // 输出:[c, b, a]
</string></p>手动双指针遍历交换
适合学习原理或需要完全自控逻辑的场景,比如在面试中手写反转逻辑。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 定义首尾两个索引,逐步向中间靠拢,交换对应位置元素
- 注意循环条件是
i ,避免重复交换或越界 - 示例代码:
List<integer> list = new ArrayList(Arrays.asList(1, 2, 3, 4, 5)); for (int i = 0, j = list.size() - 1; i </integer>
借助 Stream API(创建新列表)
如果不想修改原列表,而是生成一个反转后的新 ArrayList,可用 Stream 配合 IntStream 实现。
- 本质是创建副本再反转,适用于不可变场景或函数式风格编码
- 性能略低(涉及装箱、流操作开销),适合小数据量或强调表达清晰的场合
- 示例代码:
List<string> original = Arrays.asList("x", "y", "z");
List<string> reversed = IntStream.range(0, original.size())
.mapToObj(i -> original.get(original.size() - 1 - i))
.collect(Collectors.toCollection(ArrayList::new));
</string></string>注意事项
实际使用时需留意几个常见坑:
-
空列表或单元素列表:
Collections.reverse()能安全处理,无需额外判空 -
泛型类型无关:无论元素是
String、Integer还是自定义对象,反转逻辑都不受影响 -
并发修改风险:若列表正在被其他线程遍历或修改,反转前应确保线程安全(如用
Collections.synchronizedList()包装)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










