Java 如果元素存在于另一个Arraylist中,则从Arraylist中删除它们,而不会引发ConcurrentModificationException

Java 如果元素存在于另一个Arraylist中,则从Arraylist中删除它们,而不会引发ConcurrentModificationException,java,iterator,arraylist,Java,Iterator,Arraylist,代码如下: Ledger obj = null; MyUtilPojo obj1 = null; Iterator it = toList.iterator(); while (it.hasNext()) { obj = (Ledger) it.next(); //after first iteration next here produce an error Iterator it1 = moreToList.iterator(); while (it1.hasNext

代码如下:

Ledger obj = null;
MyUtilPojo obj1 = null;
Iterator it = toList.iterator();
while (it.hasNext()) {
    obj = (Ledger) it.next(); //after first iteration next here produce an error
    Iterator it1 = moreToList.iterator();
    while (it1.hasNext()) {
        obj1 = (MyUtilPojo) it1.next();
        if (obj.getId() == obj1.getKey()) {
            toList.remove(obj);                                
        }
    }
}

这会引发一个错误ConcurrentModificationException,有人能帮忙吗?

类似的东西应该可以在临时列表中为toList构建新内容:

final List<Ledger> target = new ArrayList<Ledger>();
for (final Ledger led : toList) {
    for (final MyUtilPojo mup : moreToList) {
        if (led.getId() != mup.getKey()) { // beware of !=
            target.add(led);
        }
    }
}

toList = target;

类似的内容应该可以在临时列表中为toList构建新内容:

final List<Ledger> target = new ArrayList<Ledger>();
for (final Ledger led : toList) {
    for (final MyUtilPojo mup : moreToList) {
        if (led.getId() != mup.getKey()) { // beware of !=
            target.add(led);
        }
    }
}

toList = target;

ConcurrentModificationException在使用迭代器遍历列表时通过添加或删除元素来修改列表时发生

    Ledger obj = null;
    MyUtilPojo obj1 = null;
    List thingsToBeDeleted = new ArrayList();

    Iterator it = toList.iterator();
    while (it.hasNext()) {
        obj = (Ledger) it.next();
        Iterator it1 = moreToList.iterator();
        while (it1.hasNext()) {
            obj1 = (MyUtilPojo) it1.next();
            if (obj.getId() == obj1.getKey()) {
                thingsToBeDeleted.add(obj);    // put things to be deleted                            
            }
        }
    }
    toList.removeAll(thingsToBeDeleted);

ConcurrentModificationException在使用迭代器遍历列表时通过添加或删除元素来修改列表时发生

    Ledger obj = null;
    MyUtilPojo obj1 = null;
    List thingsToBeDeleted = new ArrayList();

    Iterator it = toList.iterator();
    while (it.hasNext()) {
        obj = (Ledger) it.next();
        Iterator it1 = moreToList.iterator();
        while (it1.hasNext()) {
            obj1 = (MyUtilPojo) it1.next();
            if (obj.getId() == obj1.getKey()) {
                thingsToBeDeleted.add(obj);    // put things to be deleted                            
            }
        }
    }
    toList.removeAll(thingsToBeDeleted);

另请参见:另请参见:更好的是,将最后三行替换为toList.removeAllthingsToBeDeleted;更好的是,用toList替换最后三行。removeAllthingsToBeDeleted;