从列表中删除对象 - ConcurrentModificationException

时间:2014-02-23 19:28:02

标签: java list

我有这段代码:

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)

我该如何避免呢?

2 个答案:

答案 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();
   }

 }