Java删除arraylist迭代器

时间:2012-12-12 20:05:40

标签: java arraylist iterator

我在我的班级'Bomb'的Java中有一个ArrayList。

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

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

我知道如何迭代:

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

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

此致

LUXO

3 个答案:

答案 0 :(得分:5)

你需要使用next获取炸弹:

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

或者如果你可以从你的炸弹网格中获得Iterator<Bomb>(它是ArrayList<Bomb>吗?):

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:-2)

不,在迭代它时,你无法在Array的Iterator中删除它。这是Javadoc的提取物:

  

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

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