[英]Remove element from ArrayList using ListIterator in loop inside loop
我的要求是像这样从ArrayList中删除:
ArrayList<User> user = new ArrayList<User>();
ListIterator<User> outerIterator = null;
ListIterator<User> innerIterator = null;
User outer = null;
User inner = null;
for(outerIterator = user.listIterator(); outerIterator.hasNext();) {
outer = outerIterator.next();
for(innerIterator = user.listIterator(); innerIterator.hasNext();) {
inner = innerIterator.next();
if(SomeOperationOn(outer,inner)) {
innerIterator.remove();
}
}
}
上面的代码给出了异常
Exception in thread "main" java.util.ConcurrentModificationException
如预期的那样,因为当外部Iterator是同一对象(用户)上的Iterator时,我试图从innerIterator中删除。
有什么办法可以在循环内使用ListIterator从ArrayList中删除元素?
孤立地,在要迭代的集合中删除项目时,在Iterator
上调用remove()
是避免ConcurrentModificationException
的正确方法。 但是,您有两个 Iterator
在同一个ArrayList
迭代。 当您在innerIterator
上调用remove()
时, outerIterator
注意到该列表已更改,并引发ConcurrentModificationException
。
在这种情况下,如果SomeOperationOn
指示需要删除该项目,则与其立即删除, SomeOperationOn
将inner
存储在临时的待删除项目List
中。 迭代器上的for
循环完成后,调用removeAll
传递此临时列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.