我有这段代码:
public static void main(String[] args) {
User user = new User("user1","user1",1l);
User user1 = new User("user2","user2",2l);
User user2 = new User("user3","user3",3l);
List<User> list = new ArrayList<User>();
list.add(user);
list.add(user1);
list.add(user2);
for(User user3 : list){
System.out.println(user3.getName());
if(user3.getName().equals("user1")){
list.remove(user3);
}
}
}
执行此代码时,出现以下错误:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
我该如何避免呢?
答案 0 :(得分:2)
使用Iterator
迭代列表,然后使用Iterator.remove()
删除特定元素
答案 1 :(得分:1)
当您使用for-each循环遍历列表(集合)时,您不应该尝试修改集合,因为它是未定义的行为(即使在内部它使用Iterator)。
在迭代集合时处理元素删除的最佳方法是使用迭代器。
Iterator<User> it = list.iterator();
while (it.hasNext()) {
User user = it.next();
if(user.getName().equals("user1")){
it.remove();
}
}