0

我正在尝试使用 foreach 从 ArrayList 中删除 SubClass 类型的项目,并在找到它时立即将其删除。

编码:

for (SuperClass item : list)   
{     
     if (item instanceof SubClass)     
     {
        list.remove(item);     
     }   
}

我真的不知道迭代器在这种情况下是如何工作的,但我要问的是:这安全吗?还是应该抛出越界异常

任何帮助表示赞赏!

4

3 回答 3

7

list您不能使用foreach语句从一段时间中删除项目。你会得到ConcurrentModificationException

你需要使用Iterator.remove()方法

for(Iterator<SuperClass> i = list.iterator(); i.hasNext(); ) {
     SuperClass s = i.next();
     if(s instanceof SubClass) {
        i.remove();
     }
}
于 2013-08-26T06:48:16.733 回答
0

正如 sanbhat 所说,这并不安全。但是你想做的可以通过2种不同的方式来解决。

1)您可以存储所有对象,并且在 foreach 循环之后可以按索引删除。但这不是好方法。

2) 使用 for 循环(不是 foreach 循环)& 直到长度。然后如果发现对象将其删除。而已。

(确保你有像我这样的书面条件

于 2013-08-26T07:11:49.143 回答
0

尝试ListIterator

List<SuperClass> sampleList = new ArrayList<SuperClass>();
ListIterator<SuperClass> listIterator = sampleList.listIterator();
//
listIterator.remove();
//
于 2013-08-26T06:50:58.830 回答