我在寻找答案时遇到了这个老问题,我以为我会发布找到的解决方案,以防其他人经过这里寻找相同的解决方案。
对于交换2个元素,Collections.swap很好。但是,如果我们想移动更多元素,那么有一个更好的解决方案,涉及创造性地使用Collections.sublist和Collections.rotate,直到我看到这里描述的时候才想到:
http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#rotate%28java.util.List,%20int%29
这是一个报价,但也去那里自己读一遍:
注意,此方法可以有效地应用于子列表,以在保留剩余元素顺序的同时在列表中移动一个或多个元素。例如,以下成语将索引j处的元素向前移动到位置k(其必须大于或等于j):
Collections.rotate(list.subList(j, k+1), -1);



