最推荐使用 Collections.reverse() 方法,它原地反转 ArrayList,时间复杂度 O(n)、空间复杂度 O(1),但会修改原列表且要求列表非 null;也可手动双指针交换或先复制再反转以保持原列表不变。

Java 中反转 ArrayList 的顺序,最常用、最推荐的方式是使用 Collections.reverse() 方法,它直接在原列表上操作,高效且简洁。
用 Collections.reverse() 反转(推荐)
这是标准做法,无需新建列表,时间复杂度 O(n),空间复杂度 O(1)。
- 确保列表非 null(否则抛
NullPointerException) - 该方法会**修改原列表**,不返回新列表
- 适用于任何实现了
List接口的集合(包括ArrayList)
ArrayList<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
Collections.reverse(list);
// list 现在是 ["c", "b", "a"]手动遍历交换(适合学习或特殊场景)
通过双指针从首尾向中间交换元素,逻辑清晰,便于理解底层原理。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 索引范围:0 到
list.size() / 2 - 1 - 注意使用
set()替换元素,不能用add()或remove()避免下标错乱
for (int i = 0; i < list.size() / 2; i++) {
String temp = list.get(i);
list.set(i, list.get(list.size() - 1 - i));
list.set(list.size() - 1 - i, temp);
}使用 Stream API(创建新列表,不可变)
如果不想修改原列表,想获得一个反转后的新 ArrayList,可用 Stream + Collectors.collectingAndThen 配合 Collections.reverse(),或借助 IntStream 倒序索引。
立即学习“Java免费学习笔记(深入)”;
- 会产生新对象,原列表不变
- 代码稍长,性能略低于原地反转
- 适合函数式风格或需要链式调用的场景
ArrayList<String> reversed = list.stream()
.reduce(new ArrayList<>(),
(acc, item) -> { acc.add(0, item); return acc; },
(acc1, acc2) -> { acc2.addAll(0, acc1); return acc2; });更实用的写法(兼容性好):
ArrayList<String> reversed = new ArrayList<>(list); Collections.reverse(reversed); // 先复制再反转
注意事项
-
Collections.reverse()不支持基本类型数组(如int[]),只支持对象引用类型的List - 若列表为
null或包含null元素,不影响反转逻辑,但后续操作需自行判空 - 并发环境下操作
ArrayList需额外同步,Collections.reverse()本身不是线程安全的

















