1、for循环遍历list
List ss = new ArrayList();
ss.add(1);ss.add(2);ss.add(2);ss.add(4);
for(int i=0;i<ss.size();i++){
if(ss.get(i).equals(2)){
ss.remove(i);
i--;
}
}
输出结果:1,2,4
想要的结果:1,4
不能直接循环删除,因为删除一个元素的时候,后面的数据会整体往前一点一个位置,后面元素下标变了,会导致漏删某些元素。解决:每次如果删除了一个元素就 i-- ;
2、增强for循环
for(String x:list){
if(x.equals("del"))
list.remove(x);
}
这种方式的问题在于,删除元素后继续循环会报错误信息ConcurrentModificationException,因为元素在使用的时候发生了并发的修改,导致异常抛出。但是删除完毕马上使用break跳出,则不会触发报错。
3、iterator遍历
Iterator<String> it = list.iterator();
while(it.hasNext()){
String x = it.next();
if(x.equals("del")){
it.remove();
}
}
这种方式可以正常的循环及删除。但要注意的是,使用iterator的remove方法,如果用list的remove方法同样会报上面提到的ConcurrentModificationException错误。
总结:要看使用场景,如果只删除一个的话三种都能用,如果删除多个的话只能用Iterator迭代器遍历删除。
因篇幅问题不能全部显示,请点此查看更多更全内容