在Java中使用iter.remove()时出现IllegalStateException(未知来源)

3

在下面的代码中,当我尝试从ArrayList中删除一个元素时,我遇到了IllegalStateException错误。我已经搜索过并发现这个错误通常发生在代码中没有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 - ggovan
是的,就是这样。主列表中有重复项。谢谢。 - backwardsx
2个回答

1
Iterator#remove的文档中:
抛出IllegalStateException - 如果尚未调用next方法,或者在最后一次调用next方法之后已经调用了remove方法。
因此,在调用next()之前似乎调用了两次x.remove()
在调用x.remove()后,确保从内部循环中break

1
在我的情况下,你引用的文本帮了我,即“在对next方法的最后一次调用之后,remove方法已经被调用。” :D - User

-1

我通常在循环外初始化迭代器并使用 while 循环,从未遇到过该错误。

Iterator itr = YOURLIST.iterator()

while (iterator.hasNext()) { ... }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接