0

可能重复:
LinkedList 迭代器删除

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

4 回答 4

6

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

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

    while(itr.hasNext()){
        itr.next(); //This would resolve the exception.
        itr.remove();
    }
于 2012-11-12T14:09:20.477 回答
0

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

public void clear(){
    flights.clear();
}
于 2012-11-12T14:11:06.943 回答
0

使用 LinkedList 的 clear() 方法

于 2012-11-12T14:11:30.387 回答
0

查看Javadoc 的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()before 。.remove()

干杯,

于 2012-11-12T14:11:32.807 回答