怎么利用 Collections.swap() 在自定义排序算法中快速交换数组列表中的两个对象变量
Collections.swap() 只对 List 接口的实现类(比如 ArrayList、LinkedList)有效,数组就别想了。写自定义排序算法时,用它交换元素比手写三行 set/get 要干净得多——自动处理越界检查、泛型安全,连 null 元素也兼容。不过原始类型数组得先转成泛型 Lis
Collections.swap() 只对 List 接口的实现类(比如 ArrayList、LinkedList)有效,数组就别想了。写自定义排序算法时,用它交换元素比手写三行 set/get 要干净得多——自动处理越界检查、泛型安全,连 null 元素也兼容。不过原始类型数组得先转成泛型 List 才能用。

Collections.swap() 是个典型的“方便但挑食”的工具——它只吃 List 及其实子类(ArrayList、LinkedList 等),对数组理都不理。如果你在手写冒泡、选择或插入排序,操作的刚好是 List,那么直接用 swap() 就行:底层就是通过 set() 和 get() 完成下标交换,简洁又安全,还能自动帮你检查泛型和索引边界。
确保你用的是 List 而不是普通数组
这是绕不过的前提。如果你手里是 Object[] 或 String[] 这样的数组,Collections.swap() 根本不会接受。必须把它转成 List:
- 推荐先
new ArrayList(Arrays.asList(array))构建一个可修改的列表——注意:Arrays.asList()返回的 list 不支持 add/remove,但 swap 是允许的,只是底层数组不能扩容罢了。 - 更稳妥的做法:直接初始化一个真正的
ArrayList,比如Listlist = new ArrayList<>(Arrays.asList(personArray));
在自定义排序中直接调用 swap() 替代手动赋值
拿冒泡排序举例,传统写法得先搞个临时变量:
Person temp = list.get(i);
list.set(i, list.get(i+1));
list.set(i+1, temp);
换成 Collections.swap(list, i, i+1) 呢?一行就搞定,语义一目了然,还减少了出错的可能性:
- 自动校验索引是否越界(越界就抛
IndexOutOfBoundsException) - 泛型类型编译器帮你兜底,完全安全
- null 元素也照常处理,不会报错
注意它不适用于原始类型数组或基本类型包装类的“伪数组”场景
这个坑很多人踩过。比如 int[] 或 Integer[] 数组,必须老老实实先转成 List 才能用。而 Collections.swap() 的签名是:
public static void swap(List list, int i, int j)
- 错误用法:
Collections.swap(myIntArray, 0, 1)—— 编译就直接报错。 - 正确做法:
List,然后再调用 swap。list = Arrays.stream(myIntArray).boxed().collect(Collectors.toList());
性能和线程安全提醒
Collections.swap() 的时间复杂度是 O(1),底层就是两次 get 加两次 set,没有额外开销。但有一点必须说清楚:它不保证线程安全。
- 如果多个线程同时读写同一个 list,你得像这样自己加同步:用
Collections.synchronizedList()包一层。 - 单线程排序场景下,尽管放心用——比手写三行交换清爽多了。
WPS Office是一款面向macOS用户的综合办公套件,将文字处理、电子表格、演示文稿、PDF工具、模板与云协作整合在同一应用中。它兼容常见Microsoft Office格式,支持Intel及Apple芯片Mac,基础功能可免费使用,
Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。
REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。
Adobe Photoshop 是面向摄影师、设计师和内容创作者的专业图像处理工具,可在 Windows 上完成照片修饰、选区抠图、图层合成、文字排版、绘画及生成式编辑。软件采用订阅授权,由 Creative Cloud 管理安装、更新与许
Adobe InDesign 是面向印刷与数字出版的专业页面排版工具,可制作书籍、杂志、宣传册、海报、交互式 PDF 和电子书。它提供精细的文字样式、多页面管理、印前检查及多格式输出能力,并能与 Photoshop、Illustrator
Adobe Illustrator 是用于绘制矢量图形、插画、图标、徽标和版式的专业设计工具。它以路径和锚点为核心,作品放大后仍能保持清晰,并提供画板、文字、渐变、图像描摹及精确变换等功能,适合品牌视觉、印刷物料、数字界面和商业插画创作。













