在 Java 中使用 iter.remove() 时出现 IllegalStateException(未知来源)
Posted
技术标签:
【中文标题】在 Java 中使用 iter.remove() 时出现 IllegalStateException(未知来源)【英文标题】:IllegalStateException (Unknown Source) when using iter.remove() in Java 【发布时间】:2014-06-26 13:50:34 【问题描述】:尝试从以下代码中的 ArrayList 中删除元素时,我收到了非法状态异常错误。我用谷歌搜索发现这个错误通常发生在代码中没有 iter.next() 时,但我很确定我的设置正确。
for (Iterator<String[]> x = PAuditjobslist.iterator(); x.hasNext(); )
String[] temp = x.next();
if(temp.length > 2)
String PAdate = dateFudger(temp[PAuditDate],f);
int docCounter = 0;
for(String[] y: cancelledjobslist)
String Cndate = y[canJobDate];
if(temp[PAuditName].equals(y[canJobName]) && PAdate.equals(Cndate) &&
documentNameList.get(docCounter).equals(temp[PAuditDocName]) )
x.remove();
docCounter++;
这是我遇到的错误
Exception in thread "main" java.lang.IllegalStateException
at java.util.ArrayList$Itr.remove(Unknown Source)
at csvfilter.main(csvfilter.java:63)
【问题讨论】:
x.remove()
每个外循环只被调用一次吗?如果有疑问,请在删除后break
。
是的,就是这样。在主列表中重复。谢谢
【参考方案1】:
我通常在循环外初始化迭代器并使用一段时间来代替,从未出现过该错误。
迭代器 itr = YOURLIST.iterator()
while (iterator.hasNext()) ...
【讨论】:
【参考方案2】:在Iterator#remove的文档中
抛出
IllegalStateException
- 如果下一个方法尚未被调用,或者在最后一次调用下一个方法之后已经调用了 remove 方法。
所以看起来x.remove()
在调用next()
之前被调用了两次。
只需确保在调用x.remove()
后将break
退出内循环即可。
【讨论】:
在我的例子中,你引用的文字帮助了我,即“在最后一次调用下一个方法之后已经调用了 remove 方法。” :D以上是关于在 Java 中使用 iter.remove() 时出现 IllegalStateException(未知来源)的主要内容,如果未能解决你的问题,请参考以下文章
Netty——NIO(Selector处理read事件)代码示例
Netty——NIO(Selector处理read事件)代码示例
Netty——网络编程 NIO(Selector处理read事件)代码示例