• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:反復的削除時に発生するConcurrentModificationExceptionのスマートな回避)

ConcurrentModificationExceptionのスマートな回避方法

このQ&Aのポイント
  • 反復中にコレクションを削除すると発生するConcurrentModificationExceptionを回避する方法として、削除対象を保持しておいてまとめて削除する手法があります。
  • しかし、この方法ではさらに別のループが必要になるため、手間が増えてしまいます。
  • もしもっとよい解決策がある場合は教えていただきたいですが、それ以外の場合は上記の手法を採用することにします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.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 ループを使用できません。

ggaogg
質問者

お礼

・・・そういえばIteratorにremoveメソッドが用意されていましたね。 最近forばかり使っており、Iteratorのremoveメソッドを実際に使ったことがなかったので、その存在をすっかり忘れておりました。 おかげ様で変なコードの実装を避けることができます。 ありがとうございました。

関連するQ&A