【发布时间】:2018-06-15 07:42:01
【问题描述】:
我试图在我的系统中运行以下代码,但在执行此操作时遇到了非法状态异常。
import java.util.*;
public class ArraylistExample2
{
public static void main(String args[])throws Exception
{
ArrayList <String> al = new ArrayList<String>();
al.add("A");al.add("B");al.add("C");
Iterator <String> i = al.iterator();
while(i.hasNext())
{
if(al.contains("B"))
{
i.remove();
System.out.println(" Element B removed");
}
System.out.println(i.next());
}
}
}
有人可以解释一下这里的代码有什么问题,或者什么方法被非法调用导致了这个异常吗?下面是堆栈跟踪:
java.lang.IllegalStateException
at java.util.ArrayList$Itr.remove(ArrayList.java:864)
at collectionsExamples.ArraylistExample2.main(ArraylistExample2.java:17)
【问题讨论】:
-
迭代集合并同时从中删除内容可能会导致多种语言出现问题。我不确定Java是否有这个问题,但请考虑一下。
-
如果您使用的是 java 8,您可以查看“过滤”。你可以拿你的清单,只保留不是“B”的元素。 mkyong.com/java8/java-8-streams-filter-examples
-
@byxor 猜猜,迭代器在这种情况下是安全的。
-
documentation 声明:“抛出: ...
IllegalStateException- 如果尚未调用next方法”
标签: java arraylist iterator illegalstateexception