在java中使用foreach不正确?

时间:2013-08-26 06:47:29

标签: java iterator

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

代码:

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

我真的不知道迭代器在这种情况下是如何工作的,但我要问的是:这样安全吗?或者它应该抛出out of bounds exception

感谢任何帮助!

3 个答案:

答案 0 :(得分:7)

使用 foreach 语句时,您无法从list删除项目。您将获得ConcurrentModificationException

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

for(Iterator<SuperClass> i = list.iterator(); i.hasNext(); ) {
     SuperClass s = i.next();
     if(s instanceof SubClass) {
        i.remove();
     }
}

答案 1 :(得分:0)

尝试ListIterator

List<SuperClass> sampleList = new ArrayList<SuperClass>();
ListIterator<SuperClass> listIterator = sampleList.listIterator();
//
listIterator.remove();
//

答案 2 :(得分:0)

正如sanbhat所说,这不安全。 但你想做的事情可以通过2 diffenret方式来解决。

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

2)用于循环(不是foreach循环)&amp;直到长度。然后,如果发现对象删除它。就是这样。

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