我有一个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);
}
}
答案 0 :(得分:16)
列表整数= new ArrayList();
使用:
Collections.rotate(integers, -3);
答案 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个元素是否被回收或留空。