问题描述:
用下面的方法remove,将出现缺项问题
List<Integer> list = new ArrayList<Integer>();
for(int i = 0; i < 10; i++) {
list.add(i);
}
for(int i = 0; i < list.size(); i++) {
System.out.print(list.get(i));
list.remove(i);
}
结果出现02468,说明13579并没有被remove.
检验如下:
for(int i = 0; i < list.size(); i++) {
System.out.print(list.get(i));
}
将出现结果:13579
原因:List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。
解决方法:
1)使用Iterator.remove()方法
Iterator<Integer> it = list.iterator();
while(it.hasNext()) {
System.out.print(it.next());
it.remove();
}
2)每移除一个元素以后再把i减1
for(int i = 0; i < list.size(); i++) {
System.out.print(list.get(i));
list.remove(i);
i = i - 1;
}
3)for循环倒序遍历
for(int i = list.size() - 1; i >= 0; i--) {
System.out.print(list.get(i));
list.remove(i);
}