怎么利用 Collections.swap() 快速交换数组列表中两个指定位置的元素对象
作者:BrightSoul
时间:2026-05-04
浏览:0
# Collections.swap():快速交换 List 中两个指定位置的元素 `Collections.swap()` 是 Ja va 集合工具类中一个简洁高效的方法,专门用于**交换 List 中两个指定索引位置的元素**。它不适用于普通数组(如 `int[]` 或 `String[]`),
# Collections.swap():快速交换 List 中两个指定位置的元素
`Collections.swap()` 是 Ja va 集合工具类中一个简洁高效的方法,专门用于**交换 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 list = new ArrayList<>(Arrays.asList("a", "b", "c"));`
`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 —— 此时无实际变化)
* 内部自动处理边界检查:若任一索引越界(`i < 0 || i >= list.size()` 或 `j < 0 || j >= list.size()`),会抛出 `IndexOutOfBoundsException`
## ✅ 实际使用示例(含输出验证)
```ja va
// 示例:交换 ArrayList 中第 1 个和第 4 个元素(索引 0 和 3)
List 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()` 本身不加锁)
本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
索尼 Xperia 1 VIII / VII / VI 等手机获 Android 17 更新,新增桌面模式等功能
2026-09-08 16:44
加拿大留学监护声明书(IMM 5646)双页签署与公证核对指南
2026-09-03 15:02
在线PDF转图片教程:一键生成高清图片包
2026-09-03 12:04
Creo零基础入门:新建零件与第一次拉伸建模完整指南
2026-09-03 06:02
扫描件PDF转Word的在线操作步骤与编辑可行性判断
2026-09-02 18:39
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































