我在我的班级'Bomb'的Java中有一个ArrayList。
此类有一个方法'isExploded',如果炸弹爆炸,此方法将返回true,否则返回false。
现在我正在尝试遍历这个arraylist,调用此方法isExploded并从列表中删除该元素,如果它返回true。
我知道如何迭代:
for (Iterator i = bombGrid.listIterator(); i.hasNext();) {
if () {
i.remove();
}
但我不知道如何通过迭代器访问Bomb类本身的方法isExploded。有谁知道答案吗?
此致
LUXO
答案 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