ListIterator が ConcurrentModificationException をスローするのを止める方法はありますか? これは私がやりたいことです:
- 頻繁に実行される特定のメソッドを持つ一連のオブジェクトで LinkedList を作成します。
- LinkedList 内のオブジェクトの前述のメソッドの実行を担当するスレッドの数 (N など) を設定します。たとえば、リストに k 個のオブジェクトがある場合、スレッド n はリストの n 番目のオブジェクトのメソッドを実行し、次に n+N 番目のオブジェクトに移動し、次に n+2N 番目に移動します。最初に戻るまで。
ここでの問題は、これらのオブジェクトの検索にあります。この作業を行うには、明らかに ListIterator を使用します。ただし、ドキュメントに従ってスローされる ConcurrentModificationException のおかげで、これはそれほど遠くないと予測しています。リストを変更可能にし、イテレータが気にしないようにしたい。実際、これらのオブジェクトは、リスト内の他のオブジェクトを作成および破棄することが予想されます。私はいくつかの回避策を考えました:
- 新しい反復子を作成して破棄し、指定されたインデックスでオブジェクトを取得します。ただし、これは O(n) であり、望ましくありません。
- 代わりに ArrayedList を使用してください。ただし、これも望ましくありません。削除は O(n) であり、リストを時々拡張する (そしておそらく縮小する?) 必要があるという問題があるためです。
- 独自の LinkedList クラスを作成します。したくない。
したがって、私の質問です。ListIterator が ConcurrentModificationException をスローするのを止める方法はありますか?