Java删除arraylist迭代器

我在我的class级’Bomb’的Java中有一个ArrayList。

这个类有一个方法’isExploded’,如果炸弹爆炸,这个方法将返回true,否则返回false。

现在我试图遍历这个arraylist,调用此方法isExploded并从列表中删除元素,如果它返回true。

我知道如何迭代:

for (Iterator i = bombGrid.listIterator(); i.hasNext();) { if () { i.remove(); } 

但我不知道如何通过迭代器访问Bomb类本身的方法isExploded。 有谁知道答案吗?

此致

卢克索

您需要使用下一个获取炸弹:

 for (Iterator i = bombGrid.listIterator(); i.hasNext();) { Bomb bomb = (Bomb) i.next(); if (bomb.isExploded()) i.remove(); } 

或者,如果您可以从bombGrid获取Iterator (它是一个ArrayList ?):

 Iterator i = bombGrid.listIterator(); while (i.hasNext()) { Bomb bomb = i.next(); if (bomb.isExploded()) i.remove(); } 

这假设您的迭代器支持remove ,例如ArrayList给出的情况就是这种情况。

如果您使用Java 5,请使用generics:

 List bombGrid = ...; for (Iterator i = bombGrid.iterator(); i.hasNext();) { if (i.next().isExploded()) { i.remove(); } } 

不,你在迭代它时不能在迭代器中删除迭代器。 这是Javadoc提取:

这个类的iterator和listIterator方法返回的迭代器是快速失败的:如果在创建迭代器之后的任何时候对列表进行结构修改,除了通过迭代器自己的remove或add方法之外,迭代器将抛出ConcurrentModificationException。 因此,在并发修改的情况下,迭代器快速而干净地失败,而不是在未来的未确定时间冒任意,非确定性行为的风险。

http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html