news 2026/6/13 0:24:51

Java 中 List 局部反转方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 中 List 局部反转方法

目录

一、需求说明

1. 原生手动交换(最通用,推荐)

2. 借助 Collections 工具类(简洁)

关键注意点

3. Java 8 Stream 写法(不修改原列表,返回新集合)

总结选型


这里介绍 Java 中List 局部反转的几种常用实现,包含原生写法、工具类、流式写法,适配ArrayList/LinkedList等常规 List。

一、需求说明

指定起始下标 start结束下标 end(左闭右开[start, end)),反转区间内元素。 例:[1,2,3,4,5]start=1, end=4→ 结果[1,4,3,2,5]


1. 原生手动交换(最通用,推荐)

通过双指针首尾交换实现,不依赖额外包,性能最优。

import java.util.ArrayList; import java.util.List; public class ListReverse { /** * 局部反转 List [start, end) * @param list 原集合 * @param start 起始索引(包含) * @param end 结束索引(不包含) */ public static <T> void reversePartial(List<T> list, int start, int end) { // 边界校验 if (list == null || start < 0 || end > list.size() || start >= end) { return; } // 双指针交换 int left = start; int right = end - 1; while (left < right) { // 交换元素 T temp = list.get(left); list.set(left, list.get(right)); list.set(right, temp); left++; right--; } } public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); reversePartial(list, 1, 4); System.out.println(list); // [1, 4, 3, 2, 5] } }

2. 借助 Collections 工具类(简洁)

利用List.subList()截取子列表,再用Collections.reverse()反转。

注意:subList返回原列表视图,修改会直接影响原集合。

import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Demo { public static void main(String[] args) { List<Integer> list = new ArrayList<>(List.of(1,2,3,4,5)); int start = 1; int end = 4; // 截取子列表并反转 List<Integer> subList = list.subList(start, end); Collections.reverse(subList); System.out.println(list); // [1, 4, 3, 2, 5] } }

关键注意点

  1. subList(start, end)同样是左闭右开
  2. 不能对 subList 做增删操作,否则会触发ConcurrentModificationException
  3. 适合简单场景,代码极简。

3. Java 8 Stream 写法(不修改原列表,返回新集合)

如果不想改动原 List,生成新的反转后集合

import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; public class StreamReverse { public static void main(String[] args) { List<Integer> origin = new ArrayList<>(List.of(1,2,3,4,5)); int start = 1; int end = 4; List<Integer> result = IntStream.range(0, origin.size()) .mapToObj(i -> { if (i >= start && i < end) { // 区间内:倒序取值 return origin.get(end - 1 - (i - start)); } else { // 区间外:保留原值 return origin.get(i); } }) .collect(Collectors.toList()); System.out.println(result); // [1, 4, 3, 2, 5] System.out.println(origin); // 原列表不变 } }

总结选型

  1. 追求性能、通用、可复用→ 双指针手动交换(方案 1);
  2. 代码简洁、快速实现subList + Collections.reverse(方案 2);
  3. 不修改原集合、函数式风格→ Stream 写法(方案 3)。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 0:24:50

舞台灯光师必看:除了控台,用Python也能玩转DMX512协议

舞台灯光师必看&#xff1a;用Python解锁DMX512协议的创意控制当聚光灯亮起的那一刻&#xff0c;舞台便有了生命。传统灯光控制依赖昂贵的硬件控台&#xff0c;但今天&#xff0c;我们将用Python和一台普通电脑打开全新的灯光编程世界。这不是未来科技&#xff0c;而是每个灯光…

作者头像 李华
网站建设 2026/6/13 0:24:13

终极PID控制器优化实战:从黑盒日志到精准调参的完整解决方案

终极PID控制器优化实战&#xff1a;从黑盒日志到精准调参的完整解决方案 【免费下载链接】PIDtoolbox PIDtoolbox is a set of graphical tools for analyzing blackbox log data 项目地址: https://gitcode.com/gh_mirrors/pi/PIDtoolbox 面对工业控制系统持续震荡、响…

作者头像 李华
网站建设 2026/6/13 0:23:07

智慧职教学习自动化:从手动刷课到智能管理的技术转型方案

智慧职教学习自动化&#xff1a;从手动刷课到智能管理的技术转型方案 【免费下载链接】auto-play-course 简单好用的刷课脚本[支持平台:职教云,智慧职教,资源库] 项目地址: https://gitcode.com/gh_mirrors/hc/auto-play-course 面对职业教育平台的重复性学习任务&#…

作者头像 李华
网站建设 2026/6/13 0:22:57

工装 T 恤、Polo 衫全生产工序、痛点解析及多品牌自动化设备应用方案

工装T恤、Polo衫是企业团体服饰的主流品类&#xff0c;产品款式标准化、订单批量大&#xff0c;对版型统一、做工规整、标识一致有着严格要求。传统纯人工生产模式人力依赖度高、效率偏低、品质波动大&#xff0c;而如今服装自动化设备市场品牌布局完善&#xff0c;重机、兄弟、…

作者头像 李华
网站建设 2026/6/13 0:22:54

Unity 2D游戏AI寻路困境的破局者:NavMeshPlus深度解析

Unity 2D游戏AI寻路困境的破局者&#xff1a;NavMeshPlus深度解析 【免费下载链接】NavMeshPlus Unity NavMesh 2D Pathfinding 项目地址: https://gitcode.com/gh_mirrors/na/NavMeshPlus 想象一下这样的场景&#xff1a;你正在开发一款2D平台游戏&#xff0c;角色需要…

作者头像 李华
网站建设 2026/6/13 0:20:55

植物大战僵尸经典版vs融合版vs杂交版有什么区别?2026三版本横向实测对比+下载指南

植物大战僵尸在2026年已经衍生出多个版本&#xff0c;很多玩家搜到一个下载页后发现有好几个版本可选&#xff0c;不知道下哪个。 这篇文章把三款主流版本——经典原版、融合版、杂交版——从上手门槛、玩法差异、稳定性、系统兼容性四个维度逐一实测对比&#xff0c;看完你就…

作者头像 李华