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;