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异常。
博客讨论了在Java中使用ArrayList时,通过下标删除元素导致的问题及正确解决方案。错误示例显示了在循环中直接使用下标删除元素,这会导致 ConcurrentModificationException。正确方法是使用迭代器,确保在调用remove()之前调用next()。博客强调了在遍历和修改集合时使用迭代器的重要性。
668

被折叠的 条评论
为什么被折叠?



