ArrayList 出现非法状态异常
Illegal state Exception Occurring with ArrayList
我试图 运行 我的系统中的以下代码,但在这样做时遇到了非法状态异常。
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)
光标还没有移动到元素上。您刚刚检查了是否有元素。
您在实际开始迭代之前从迭代器中删除了一个元素。因此迭代器中没有要删除的当前元素。
首先将光标移动到下一个元素,如果符合条件则尝试将其删除。
所以,修改后的代码看起来像
while(i.hasNext())
{
Strng s = i.next(); // note this
if(al.contains("B"))
{
i.remove();
System.out.println(" Element B removed");
}
System.out.println(s);
}
这是正确的实现,你不需要检查 if(al.contains("B")) 而是检查元素值是否为 B
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())
{
String element=i.next();
if("B".equals(element))
{
i.remove();
System.out.println(" Element B removed");
}
}
}
}
我试图 运行 我的系统中的以下代码,但在这样做时遇到了非法状态异常。
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)
光标还没有移动到元素上。您刚刚检查了是否有元素。
您在实际开始迭代之前从迭代器中删除了一个元素。因此迭代器中没有要删除的当前元素。
首先将光标移动到下一个元素,如果符合条件则尝试将其删除。
所以,修改后的代码看起来像
while(i.hasNext())
{
Strng s = i.next(); // note this
if(al.contains("B"))
{
i.remove();
System.out.println(" Element B removed");
}
System.out.println(s);
}
这是正确的实现,你不需要检查 if(al.contains("B")) 而是检查元素值是否为 B
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())
{
String element=i.next();
if("B".equals(element))
{
i.remove();
System.out.println(" Element B removed");
}
}
}
}