collections.rotate是java中对list原地循环移位的方法,正数右移(末尾元素前移)、负数左移(首元素后移),自动取模,时间复杂度o(n)、空间复杂度o(1)。

Collections.rotate 是 Java 集合工具类中一个简单但实用的方法,用于对 List 进行**原地循环移位**(不创建新列表),支持左移和右移,底层通过三次反转实现,时间复杂度 O(n),空间复杂度 O(1)。
基本用法:指定移位距离
方法签名:public static void rotate(List> list, int distance)
参数说明:
- list:必须是支持随机访问的 List(如 ArrayList、LinkedList 也支持但性能略低);
- distance:移位步数,正数表示**右移**,负数表示**左移**;
- 实际移位量会自动对列表长度取模(distance % list.size()),避免无效大数操作。
例如:
-
[1, 2, 3, 4, 5]右移 2 位 →[4, 5, 1, 2, 3] -
[1, 2, 3, 4, 5]左移 2 位(即rotate(list, -2))→[3, 4, 5, 1, 2]
右移:传入正数 distance
右移 k 位,等价于把最后 k 个元素移到开头。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
List<integer> list = new ArrayList(Arrays.asList(1, 2, 3, 4, 5)); Collections.rotate(list, 2); // 右移 2 位 // 结果:[4, 5, 1, 2, 3] </integer>
注意:如果 distance > list.size(),比如 rotate(list, 7) 对长度为 5 的列表,实际执行的是 7 % 5 = 2,效果同上。
左移:传入负数 distance
左移 k 位,等价于把前 k 个元素移到末尾,只需传 -k。
-
Collections.rotate(list, -1)→ 左移 1 位(头变尾) -
Collections.rotate(list, -list.size())→ 相当于不移(恒等操作) - 左移 k 位也可等价为右移
list.size() - k位,例如左移 2 位 ≡ 右移 3 位(对长度 5 的列表)
注意事项与常见问题
⚠️ 不支持不可变或固定大小的列表(如 Arrays.asList() 返回的列表若底层数组不可变,调用 rotate 会抛 UnsupportedOperationException)——建议包装成 new ArrayList(...) 再操作。
⚠️ LinkedList 虽然支持,但因不支持高效随机访问,内部会转为数组处理,小列表影响不大,大数据量时建议用 ArrayList。
✅ 移位后原列表被直接修改,无需重新赋值;
✅ 空列表或单元素列表调用安全,无副作用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










