所以这只是一个理解列表迭代器的虚拟程序。
我正在做的步骤
代码:
public class Main {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
al.add("A");
al.add("B");
ListIterator lItr = al.listIterator();
while(lItr.hasNext()) {
String s = (String)lItr.next();
System.out.println(s);
if(s.equals("B")) {
lItr.add("C");
}
if(s.equals("A")) {
lItr.set("a");
}
else if(s.equals("B")) {
lItr.set("b");//Im getting an exception here saying
"java.lang.IllegalStateException"
}
}
System.out.println(al);
}
}
请任何人告诉我为什么我会收到此异常为什么我不能将“B”设置为 b。
最佳答案
documentation 清楚地说明了为什么会发生这种情况:
你在调用 add
之前已经调用了 set
,对吧?
if(s.equals("B")) {
lItr.add("C"); // <-- here!
}
if(s.equals("A")) {
lItr.set("a");
}
else if(s.equals("B")) {
lItr.set("b"); // <-- and here
}
添加元素后,您将设置的元素会发生变化,因此这是不允许的。
要解决此问题,只需在
add
之后执行 set
: // Also use generic types properly!
ListIterator<String> lItr = al.listIterator();
while(lItr.hasNext()) {
String s = lItr.next();
System.out.println(s);
if(s.equals("A")) {
lItr.set("a");
lItr.add("C"); // note the change here
}
else if(s.equals("B")) {
lItr.set("b");
}
}
关于java - Java的列表迭代器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53627398/