arraylist 无内置反转方法,推荐用 collections.reverse() 原地反转,时间复杂度 o(n)、空间复杂度 o(1);也可手动循环交换理解原理;注意 null 检查、线程安全及是否需保留原列表。

Java 中的 ArrayList 本身没有内置的反转方法,但可以通过 Collections.reverse() 快速实现原地反转,这是最常用、最简洁的方式。
使用 Collections.reverse()(推荐)
这是标准库提供的通用方法,适用于所有实现了 List 接口的集合,包括 ArrayList。它直接修改原列表,不创建新对象,时间复杂度为 O(n),空间复杂度为 O(1)。
- 确保列表非 null,否则会抛出
NullPointerException - 若需保留原顺序,应先调用
new ArrayList(originalList)复制一份再反转 - 示例代码:
ArrayList<string> list = new ArrayList(Arrays.asList("a", "b", "c"));
Collections.reverse(list); // list 变为 ["c", "b", "a"]</string>手动循环交换(理解原理)
适合学习底层逻辑或特殊场景(如只反转某一段)。通过首尾索引向中间靠拢,逐对交换元素。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 索引范围:从
0到size() / 2 - 1 - 注意避免越界,使用
set(i, set(j, ...))或临时变量保存值 - 示例片段:
for (int i = 0, j = list.size() - 1; i
使用 Stream API(创建新列表)
如果不想修改原列表,且使用 Java 8+,可用 Stream + Collectors.collectingAndThen 配合 Arrays.asList 和 Collections.reverse,或更直观地用索引倒序映射:
- 生成的是新
ArrayList,原列表不变 - 性能略低(涉及装箱、流开销),适合函数式风格偏好者
- 示例:
ArrayList<integer> reversed = IntStream.rangeClosed(1, list.size())
.mapToObj(i -> list.get(list.size() - i))
.collect(Collectors.toCollection(ArrayList::new));</integer>注意事项
反转操作与元素类型无关,但要注意:
- 若元素为可变对象,反转只改变引用顺序,不影响对象内部状态
- 并发环境下,
ArrayList非线程安全,反转前应确保无其他线程同时修改 - 反转空列表或单元素列表是安全的,无需额外判空
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










