2

我的类“炸弹”的 Java 中有一个 ArrayList。

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

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

我知道如何迭代:

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

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

真挚地,

卢克索

4

3 回答 3

5

您需要使用next获得炸弹:

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

或者,如果你可以Iterator<Bomb>从你的 bombGrid 中得到一个(它是一个ArrayList<Bomb>?):

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

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

于 2012-12-12T20:07:20.390 回答
0

如果您使用 Java 5,请使用泛型:

List<Bomb> bombGrid = ...;
for (Iterator<Bomb> i = bombGrid.iterator(); i.hasNext();) {
  if (i.next().isExploded()) {         
    i.remove();
  }
}
于 2012-12-12T20:09:12.540 回答
-2

不,您不能在迭代时删除 ArrayList 的迭代器内部。这是 Javadoc 摘录:

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

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

于 2012-12-12T20:21:07.530 回答