- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:反復的削除時に発生するConcurrentModificationExceptionのスマートな回避)
ConcurrentModificationExceptionのスマートな回避方法
このQ&Aのポイント
- 反復中にコレクションを削除すると発生するConcurrentModificationExceptionを回避する方法として、削除対象を保持しておいてまとめて削除する手法があります。
- しかし、この方法ではさらに別のループが必要になるため、手間が増えてしまいます。
- もしもっとよい解決策がある場合は教えていただきたいですが、それ以外の場合は上記の手法を採用することにします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Iteratorを使うように書き換えるよりないのでは? For-Each ループ http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/language/foreach.html for-each ループは好きなときに使えます。使用すればコードがわかりやすくなりますが、どこででも使用できるわけではありません。たとえば、expurgate メソッドについて考えてみましょう。現在の要素を削除するには、反復子にアクセスする必要があります。for-each ループでは反復子が隠されるため、remove メソッドを呼び出すことができません。そのため、for-each ループをフィルタリングに使用することはできません。同様に、リストや配列内の要素をたどりながら置き換えるときには for ループを使用できません。
お礼
・・・そういえばIteratorにremoveメソッドが用意されていましたね。 最近forばかり使っており、Iteratorのremoveメソッドを実際に使ったことがなかったので、その存在をすっかり忘れておりました。 おかげ様で変なコードの実装を避けることができます。 ありがとうございました。