2

我有一个 ArrayList,我想将其前三个元素移到列表的末尾。我使用'set',但它没有按预期工作:

List<Integer> integers = new ArrayList<Integer>();

for(Integer i : integers) {
    int index = integers.indexOf(i);
    if(index==0 || index==1 || index==2) {
        integers.set(i, integers.size()-1);
    }
}
4

6 回答 6

15
List<Integer> integers = new ArrayList<Integer>();

采用:Collections.rotate(integers, -3);

供参考: http ://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#rotate%28java.util.List,%20int%29

于 2013-02-21T18:41:29.013 回答
3

适当的使用subList()addAll()方法

于 2013-02-21T18:35:22.683 回答
0
for(int index=0;index<3;index++){
    integers.add(integers.get(0));
    integers.remove(0);
}

我认为应该这样做。

于 2013-02-21T18:55:18.853 回答
0

set 方法至少按照Javadoc中的描述工作。

integers.set(i, integers.size()-1);

通过在列表的位置 i 设置值 integers.size()-1 来更改列表:)

我认为 Collections.rotate 是最好的解决方案,但您也可以将列表的第一个元素添加到其末尾,然后删除第一个元素并重复 3 次:

for(int i = 0; i < 3; i++){
    integers.add(integers.get(0));
    integers.remove(0);
}
于 2013-02-21T19:21:00.943 回答
-1

作为第一个答案,表格将是:

List<Integer> auxList = originalList.subList(0, 3);
for(int i =0; i < 3; i++) {originalList.remove(i);}
originalList.addAll(auxList);
于 2013-02-21T18:39:43.083 回答
-1

为什么不使用 add() 将它们放在最后,然后删除旧元素?异常是由于在修改列表后使用了迭代器。答案是使用迭代器保存这三个项目,然后在迭代器之外修改列表。

List<Integer> integers = new ArrayList<Integer>();
Integer keep[] = new Integer[3];

for(Integer i : integers) {
    int index = integers.indexOf(i);
    if(index==0 || index==1 || index==2) {
        keep[i] = i;  // save the first three
    }
}

// add the first three to the end of the list
integers.add(keep[0]);
integers.add(keep[1]);
integers.add(keep[2]);


// remove the previous first three
integers.remove(0);
integers.remove(1);      
integers.remove(2);

我想知道您是否需要integers.remove(0)根据第 0 个元素是被回收还是留空来做 3 次。

于 2013-02-21T18:45:19.613 回答