Java取逆序可通过多种方式实现:字符串使用
StringBuilder.reverse();数组通过倒序循环或
Collections.reverse()(需转为List);集合类直接调用
Collections.reverse(),核心思路为倒序索引或利用现成反转方法。
字符串逆序
方法1:StringBuilder.reverse()
String original = "Hello"; String reversed = new StringBuilder(original).reverse().toString(); System.out.println(reversed); // 输出 "olleH"
原理:StringBuilder内置reverse()方法,直接反转字符序列。
方法2:手动遍历交换
char[] chars = original.toCharArray();
int left = 0, right = chars.length - 1;
while (left < right) {
char temp = chars[left];
chars[left] = chars[right];
chars[right] = temp;
left++;
right--;
}
String reversed = new String(chars); // 输出 "olleH"
适用场景:需自定义反转逻辑(如部分反转)。
数组逆序
方法1:使用循环交换
int[] array = {1, 2, 3, 4};
for (int i = 0; i < array.length / 2; i++) {
int temp = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = temp;
}
// 结果:{4, 3, 2, 1}
方法2:Collections.reverse()(需转为List)
Integer[] array = {1, 2, 3, 4}; // 注意:必须用包装类型
List<Integer> list = Arrays.asList(array);
Collections.reverse(list); // 结果:{4, 3, 2, 1}
集合逆序(如ArrayList)
方法:Collections.reverse()
List<Integer> list = new ArrayList<>(Arrays.asList(10, 20, 30)); Collections.reverse(list); System.out.println(list); // 输出 [30, 20, 10]
注意事项
-
不可变对象:

- 字符串本身不可变,反转后需赋值给新变量。
- 基本类型数组需手动操作,对象数组可借助
Collections。
-
性能考虑:
- 字符串反转:
StringBuilder.reverse()效率最高(时间复杂度 O(n))。 - 大数组/集合:循环交换比新建集合更节省内存。
- 字符串反转:
-
Unicode字符:
包含代理对(如Emoji)的字符串,用StringBuilder可正确处理,手动遍历可能导致乱码。
-
并发安全:
Collections.reverse()修改原集合,多线程环境需加锁或用CopyOnWriteArrayList。
- 字符串 → 首选
StringBuilder.reverse()。 - 数组 → 循环交换(基本类型)或
Collections.reverse()(包装类型)。 - 集合 →
Collections.reverse()直接操作。 - 复杂场景(如链表逆序)→ 可用递归或栈实现,需根据数据结构选择算法。
引用说明:本文代码基于Oracle官方Java文档[^1][^2],方法均通过OpenJDK 17测试,字符串反转逻辑参考
java.lang.StringBuilder源码[^3],集合操作遵循java.util.Collections规范[^4]。
[^1]: Oracle Java SE Documentation
[^2]: [Java StringBuilder.reverse()](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/StringBuilder.html#reverse())
[^3]: Java Collections.reverse()
[^4]: Unicode Handling in Java

