繁体   English   中英

在循环内使用ListIterator从ArrayList中删除元素

[英]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指示需要删除该项目,则与其立即删除, SomeOperationOninner存储在临时的待删除项目List中。 迭代器上的for循环完成后,调用removeAll传递此临时列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM