我正在尝试使用foreach从ArrayList中删除SubClass类型的项目,并在找到它时将其删除。
代码:
for (SuperClass item : list)
{
if (item instanceof SubClass)
{
list.remove(item);
}
}
我真的不知道迭代器在这种情况下是如何工作的,但我要问的是:这样安全吗?或者它应该抛出out of bounds exception?
感谢任何帮助!
答案 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;直到长度。然后,如果发现对象删除它。就是这样。
(确保你有像我一样的书面条件