一尘不染

在ArrayList中移动项目

java

我一直在玩ArrayLists。我想要实现的是一种执行以下操作的方法:

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

我苦苦挣扎的部分是“向上移动”部分。任何有关如何实现的技巧或代码示例都将受到赞赏。


阅读 388

收藏
2020-09-08

共1个答案

一尘不染

我在寻找答案时遇到了这个老问题,我以为我会发布找到的解决方案,以防其他人经过这里寻找相同的解决方案。

对于交换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);

2020-09-08