public static void main(String[] args) {
//list.remove陷阱
List list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(3);
list.add(5);
System.out.println(list);
for (int i = 0; i < list.size(); i++) {
if((int)list.get(i)==3){
list.remove(i);
}
}
System.out.println(list);
}
这块代码输出结果是
为什么只删除了一个3呢
因为在list在删除时,会将删除元素之后的所有元素都前移一位
,在删除第一个3时(下标2),第二个3的下标会变成2,然后i+1=3,即下次遍历会跳过删除元素的下一个元素
所以,list在有删除操作时,要将遍历的i减减
即
public static void main(String[] args) {
//list.remove陷阱
List list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(3);
list.add(5);
System.out.println(list);
for (int i = 0; i < list.size(); i++) {
if((int)list.get(i)==3){
list.remove(i--);//**************将i--
}
}
System.out.println(list);
}
结果如下