我一直在玩ArrayLists。我想要实现的是一种执行以下操作的方法:
ArrayList
Item 1 Item 2 Item 3 Item 4
我试图能够将列表中的项目向上移动,除非它已经位于顶部,在这种情况下它将保持不变。例如,如果项目3被移动,则列表将为:
Item 1 Item 3 Item 2 Item 4
从目前的了解来看,我想要一些类似的东西:
IF arrayname index is not equal to 0 THEN move up ELSE do nothing
我苦苦挣扎的部分是“向上移动”部分。任何有关如何实现的技巧或代码示例都将受到赞赏。
我在寻找答案时遇到了这个老问题,我以为我会发布找到的解决方案,以防其他人经过这里寻找相同的解决方案。
对于交换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);
注意,此方法可以有效地应用于子列表,以在保留剩余元素顺序的同时在列表中移动一个或多个元素。例如,以下成语将索引j处的元素向前移动到位置k(其必须大于或等于j):
Collections.rotate(list.subList(j, k+1), -1);