【发布时间】:2015-10-06 12:46:27
【问题描述】:
我的要求是像这样从 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
正如预期的那样,因为我试图从 innerIterator 中删除,而 outerIterator 是同一对象(用户)上的 Iterator。
有没有办法在循环内循环中使用 ListIterator 从 ArrayList 中删除元素?
【问题讨论】:
-
即使你解析了
ConcurrentModificationException,由于调用了outerIterator.remove(),你的ArrayList在这段代码的末尾也会是空的。这是你想要的吗? -
outerIterator.remove() 我只是用来检查的,但是是的,在循环列表的末尾会是空的。
-
那为什么不简单地声明一个新的相同大小的空列表呢? (或重新初始化这个?)
-
您可以做的就是使用另一个列表来维护要删除的元素列表并在最后删除它们。
-
然后请编辑您的问题以删除该行;它改变了代码的全部用途。
标签: java arraylist collections iterator listiterator