collections.swap 是 java 中用于交换 list 指定索引元素的静态方法,仅适用于可修改的 list 实现,索引越界抛 indexoutofboundsexception,不可变列表抛 unsupportedoperationexception,线程不安全但时间复杂度为 o(1)。

Collections.swap 是 Java 集合工具类中的一个静态方法,专门用于**交换 List 中两个指定索引位置的元素**。它操作的是 List 接口的实现(如 ArrayList、LinkedList),不适用于数组或不可变列表。
基本用法和语法
方法签名如下:
public static void swap(List> list, int i, int j)参数说明:
- list:要操作的 List 对象,必须是可修改的(如 new ArrayList())
- i 和 j:要交换的两个索引位置,支持任意顺序(i 可大于 j,也可相等)
注意:索引越界(如 i = list.size())会抛出 IndexOutOfBoundsException,调用前建议校验。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
实际使用示例
以下是一个完整可运行的小例子:
ListCollections.swap(list, 0, 3);
System.out.println(list); // 输出:[D, B, C, A]
这里把索引 0("A")和索引 3("D")位置的元素互换了。
常见注意事项
- 只适用于 List,不能用于普通数组(数组需手动交换或用 Arrays.asList 包装后再操作)
- 对 不可变列表(如 List.of()、Collections.unmodifiableList())会抛出 UnsupportedOperationException
- 线程不安全:若多线程并发修改同一 List,需额外同步
- 性能高效:内部直接通过 set() 操作完成,时间复杂度 O(1)
和手动交换的区别
等价的手动写法是:
String temp = list.get(i);list.set(i, list.get(j));
list.set(j, temp);
Collections.swap 就是这段逻辑的封装,更简洁、语义更清晰,也避免临时变量命名和空指针隐患(如 get 返回 null 后 set 出错时更容易定位)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










