上一篇
Java如何逆序输出
- 后端开发
- 2025-06-15
- 3306
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