【问题标题】:Linkedlist error when removing using an iterator [duplicate]使用迭代器删除时出现链表错误 [重复]
【发布时间】:2012-11-12 14:06:23
【问题描述】:

可能重复:
LinkedList iterator remove

private LinkedList flights;

...

public FlightQueue() {
    super();
    flights = new LinkedList();
}

...

public void clear(){

   ListIterator itr = flights.listIterator();

   while(itr.hasNext()){
        itr.remove();
   }
}

....

Exception in thread "main" java.lang.IllegalStateException
    at java.util.LinkedList$ListItr.remove(Unknown Source)
    at section1.FlightQueue.clear(FlightQueue.java:44)
    at section1.FlightTest001.main(FlightTest001.java:22)

不知道出了什么问题,它在第一个 itr.remove() 时显示错误。

【问题讨论】:

标签: java iterator linked-list


【解决方案1】:

来自iterator API:
IllegalStateException - 如果下一个方法 还没有被调用,或者 remove 方法已经被调用了 在最后一次调用下一个方法之后

您必须在调用 iterator.remove() 之前调用 iterator.next()

    while(itr.hasNext()){
        itr.next(); //This would resolve the exception.
        itr.remove();
    }

【讨论】:

  • 哦,谢谢,哈哈,现在可以使用了。
  • @user1817988 不客气 :)
  • 您在一小时前发布了同样的问题,得到了同样的回复。怎么又发了???
  • 另一个问题导致了这个问题,我想如果我将它作为一个新问题发布,我会得到更快的答案。
  • @user1817988 而且,您必须接受您认为已解决您的问题的答案,我知道您是 SO 新手。在此处阅读有关接受答案如何帮助您meta.stackexchange.com/questions/5234/…
【解决方案2】:

只有在您之前调用过 next()previous() 时才能调用 itr.remove(),因为它会删除一个元素由这些方法返回。

public void clear(){
    flights.clear();
}

【讨论】:

    【解决方案3】:

    使用LinkedList的clear()方法

    【讨论】:

      【解决方案4】:

      看看Javadoc for ListIterator。它特别指出:

      IllegalStateException - neither next nor previous have been called, 
      or remove or add have been called after the last call to next or previous.
      

      在您发布的代码片段中,您需要在 .remove() 之前添加一个 .next()

      干杯,

      【讨论】:

        猜你喜欢
        • 2013-03-27
        • 2015-10-05
        • 2023-03-10
        • 2021-05-04
        • 1970-01-01
        • 2015-08-20
        • 1970-01-01
        • 1970-01-01
        • 2011-04-23
        相关资源
        最近更新 更多