6

重複の可能性:
コレクションの反復中に要素を削除するための効率的な同等物

private LinkedList flights;

....

public void clear(){

    ListIterator itr = flights.listIterator();

    while(itr.hasNext()){


        flights.remove(itr.next());

    }

}

....

Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.LinkedList$ListItr.checkForComodification(Unknown Source)
    at java.util.LinkedList$ListItr.next(Unknown Source)
    at section1.FlightQueue.clear(FlightQueue.java:44)
    at section1.FlightTest001.main(FlightTest001.java:22)

どうしたの?エラーが発生した理由をまったく理解できません。配列リストまたは配列で同じコードを使用し、機能したと確信しています。

4

1 に答える 1

15

要素を繰り返し処理しているときにコレクションからアイテムを直接削除することはできませんConcurrentModificationExceptionIterator.remove()反復中にコレクションを変更する安全な方法として認められています。が表示されないようにするには、次のIllegalStateExceptionように呼び出してIterator.next()ください。

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

または、単に 内のすべての要素を削除したい場合はCollection、次を使用できます。

flights.clear();

参照: Collection の反復中に要素を削除するための効率的な等価物

于 2012-11-12T13:20:17.213 に答える