Collections.swap()用于交换List中两个指定索引的元素,仅适用于List接口实现类,不支持普通数组;需确保List非null,索引越界会抛异常。

Collections.swap() 是 Java 集合工具类中一个简洁高效的方法,专门用于**交换 List 中两个指定索引位置的元素**。它不适用于普通数组(如 int[] 或 String[]),只作用于实现了 List 接口的对象(如 ArrayList、LinkedList)。
✅ 前提:确保操作的是 List 而非数组
如果你手头是普通数组,需先转为 List(注意:Arrays.asList() 返回的是固定大小的列表,底层仍绑定原数组;若需修改,建议用 new ArrayList(Arrays.asList(...))):
- ❌ 错误用法:
String[] arr = {"a", "b", "c"}; Collections.swap(arr, 0, 1);→ 编译不通过 - ✅ 正确用法:
List<string> list = new ArrayList(Arrays.asList("a", "b", "c"));</string>
Collections.swap(list, 0, 2); // 交换索引 0 和 2 的元素
✅ 调用方式与参数说明
方法签名:public static void swap(List> list, int i, int j)
- list:要操作的 List 对象(必须非 null)
- i, j:待交换的两个索引位置(支持任意顺序,i 可大于 j,也支持 i == j —— 此时无实际变化)
- 内部自动处理边界检查:若任一索引越界(IndexOutOfBoundsException
✅ 实际使用示例(含输出验证)
// 示例:交换 ArrayList 中第 1 个和第 4 个元素(索引 0 和 3)
List<String> names = new ArrayList<>(Arrays.asList("Alice", "Bob", "Charlie", "Diana", "Eve"));
System.out.println(names); // [Alice, Bob, Charlie, Diana, Eve]
Collections.swap(names, 0, 3);
System.out.println(names); // [Diana, Bob, Charlie, Alice, Eve]
✅ 注意事项与常见误区
- 该方法直接修改原 List,**无返回值(void)**,不要试图赋值给新变量
- 对
Arrays.asList()返回的列表调用swap是安全的(它支持 set 操作),但不能 add/remove —— 否则抛UnsupportedOperationException - 若需交换数组元素,别绕弯:直接用临时变量,三行搞定:
String temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; - 多线程环境下,List 需自行保证线程安全(
Collections.swap()本身不加锁)

















