将List <integer>元素移动到列表末尾</integer>

时间:2013-02-21 18:34:01

标签: java list arraylist

我有一个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);
    }
}

6 个答案:

答案 0 :(得分:16)

列表整数= new ArrayList();

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

for(int index=0;index<3;index++){
    integers.add(integers.get(0));
    integers.remove(0);
}

我认为应该这样做。

答案 3 :(得分: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);
}

答案 4 :(得分:-1)

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

List<Integer> auxList = originalList.subList(0, 3);
for(int i =0; i < 3; i++) {originalList.remove(i);}
originalList.addAll(auxList);

答案 5 :(得分:-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个元素是否被回收或留空。