使用迭代器删除时出现链接列表错误

时间:2012-11-12 14:06:23

标签: java iterator linked-list

  

可能重复:
  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()显示错误。

4 个答案:

答案 0 :(得分:5)

  

来自iterator API
  IllegalStateException - 如果是下一个方法   尚未调用,或者已经调用了remove方法   在最后一次调用下一个方法之后

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

使用LinkedList的clear()方法

答案 3 :(得分:0)

查看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.

您在发布的代码片段中.next()之前需要.remove()

干杯,