Collections.rotate 是 Java 中用于原地循环移动 List 元素的方法,支持正数向右、负数向左旋转,自动取模,时间复杂度 O(n),空间复杂度 O(1),仅适用于可修改的 List 实现。

Collections.rotate 是 Java 集合工具类中一个简洁高效的方法,用于**原地循环移动 List 中的元素**,不需要额外创建新列表或手动遍历。它支持向左或向右旋转,核心是通过一次数组拷贝(底层调用 System.arraycopy)完成位移,时间复杂度为 O(n),空间复杂度为 O(1)(仅临时存储少量元素)。
基本用法:指定旋转步数
方法签名:
public static void rotate(List> list, int distance)
其中 list 必须是可修改的(如 ArrayList、LinkedList),distance 表示旋转偏移量:
- 正数表示向右旋转(末尾元素移到前面)
- 负数表示向左旋转(首部元素移到后面)
- 实际旋转步数会自动对列表长度取模(
distance % list.size()),避免无效重复操作
向右旋转示例:把最后 2 个元素移到开头
例如有一个列表 [1, 2, 3, 4, 5],执行 Collections.rotate(list, 2):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 等效于:将后 2 个元素
[4, 5]拆出,再拼到前面 →[4, 5, 1, 2, 3] - 代码片段:
Collections.rotate(list, 2);
System.out.println(list); // 输出 [4, 5, 1, 2, 3]
向左旋转示例:把前 1 个元素移到末尾
对同一列表执行 Collections.rotate(list, -1):
- 等效于:将首元素
1拆出,追加到末尾 →[2, 3, 4, 5, 1] - 注意:
Collections.rotate(list, -1)和Collections.rotate(list, 4)在长度为 5 的列表中效果相同(因为-1 % 5 == 4)
注意事项与常见坑
- 只适用于 List 接口实现类,不支持
Set或Map - 传入的
list必须支持随机访问(如ArrayList)或有高效迭代器(LinkedList也可用,但性能略低) - 若列表为空或只有一个元素,任何
distance都不会改变结果 - 不可用于不可变列表(如
Arrays.asList()返回的固定大小列表在某些 JDK 版本中可能抛UnsupportedOperationException;建议用new ArrayList<>(…)包装后再操作)

















