次のように、イテレータを使用して ArrayList をトラバースしているこのコードがあります。
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Element element = iterator.next();
iterator.remove();
handle(element)
}
'handle(Element element)' は次のようになります。
ListIterator iterator = list.listiterator();
iterator.add(element);
iterator
最初のメソッドが新しく追加された要素で更新されないため、これにより ConcurrentModificationException が発生します。
私は現在、CopyOnWriteArrayListを使用してこれを解決しましたが、これらはパフォーマンスに非常にコストがかかります。これを修正するより良い方法はありますか?
前もって感謝します!
(注:この例は意味がありませんが、私が直面していることを説明するために作成されました)
なぜ私がこれをしているのかを説明しようとします:
メインクラスに実行する必要がある「コマンド」のリストがあります
これらのコマンドを反復して 1 つずつ実行し、実行時にリストから削除する while ループ (例のコード 1) があります。
コマンドの実行中、このコマンドは、メイン クラスに保存されているリストに新しいコマンドを追加できます。(これは実際にはもう少し複雑です。コマンドを処理するとクライアントからの応答が要求され、クライアントはコマンドで応答し、保存されたリストに追加されます)。