package misc;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class Test {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add(new User(0));
list.add(new User(1));
list.add(new User(2));
list.add(new User(3));
filter(list);
} public static void filter(List<User> list){
for (Iterator it=list.iterator();it.hasNext();){
User u=(User)it.next();//这里会导致异常
if (u!=null && u.id==0){
list.remove(u);
} }
}
}
class User{ int id;
public User (int id){
this.id=id;
}
}
异常信息:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at misc.Test.filter(Test.java:19)
at misc.Test.main(Test.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)
public static void main(String[] args) {
ArrayList<User> list=new ArrayList<User>();
list.add(new User(0));
list.add(new User(1));
list.add(new User(2));
list.add(new User(3));
filter(list);
} public static void filter(List<User> list){
for (int i = 0;i < list.size(); i++){
User u=(User)list.get(i);
if (u!=null && u.id==0){
list.remove(u);
i--;
}
}
}
}
跌代只读取内容是可以的,在跌代中更新列表就会抛此异常
User u=(User)it.next();//这里会导致异常
if (u!=null && u.id==0){
list.remove(u);
} }
把list.remove(u)改成it.remove(u),你用iterator迭代就要用iterator的remove方法
if (u!=null && u.id==0){
u==null
}