先看一下下面的一段代码:
public static void main(String args[]) {
List<String> famous = new ArrayList<String>();
famous.add("liudehua");
famous.add("madehua");
famous.add("liushishi");
famous.add("tangwei");
for (String s : famous) {
if (s.equals("madehua")) {
famous.remove(s);
}
}
}
运行时报异常:
Exception in thread “main” java.util.ConcurrentModificationException
at
java.util.AbstractListItr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343) at
com.bes.Test.main(Test.java:15)
ConcurrentModifiedException ,这个异常顾名思义:当打开 Iterator 迭代集合时,同时又在对集合进行修改。
Java新手(本人也是新手)最容易犯的错误,对JAVA集合进行遍历删除时务必要用迭代器。切记。
其实对于如上for循环,运行过程中还是转换成了如下代码:
for(Iterator<String> it = famous.iterator();it.hasNext();){
String s = it.next();
if(s.equals("madehua")){
famous.remove(s);
}
}
仍然采用的是迭代器,但删除操作却用了错误的方法(famous.remove(s)方法)。如将famous.remove(s)改成it.remove()
则运行正常,结果也无误。
当然如果改成:
for (int i = 0; i < famous.size(); i++) {
String s = famous.get(i);

最低0.47元/天 解锁文章

1018

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



