1、错误示例
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
for(int i=0; i<list.size(); i++){
list.remove(i);
}
System.out.println(list);
输出结果是:
[b,d]
注意:在这个方法中有一个严重的错误。当一个元素被删除时,列表的大小缩小并且下标变化,所以当你想要在一个循环中用下标删除多个元素的时候,它并不会正常的生效。
2、正确示例
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
Iterator<String> iter = list.iterator();
while(iter.hasNext()){
String s = iter.next();
if(s.equals("a")){
iter.remove();
}
}
说明:.next()必须在.remove()之前调用。在一个foreach循环中,编译器会使.next()在删除元素之后被调用,否则会抛出ConcurrentModificationException异常。