• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:java.util.ConcurrentModificationExceptionが発生します。)

java.util.ConcurrentModificationExceptionが発生する原因と回避方法

このQ&Aのポイント
  • ConcurrentModificationExceptionという例外が発生してしまいます。どうすれば回避できるのでしょうか?
  • この例外は、特定の操作をすると必ず発生しますが、他の操作では発生しません。原因がわかりません。
  • synchronizedやiterator.removeを使用しても問題が解決せず、どのような対策が効果的でしょうか?

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

  • ベストアンサー
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.1

 こんにちは。  反復子を使ってる最中にマップの中身をつつくと不整合が発生するので、その例外が出ます。  ちゃんと iterator.remove()を使えば、例外は出ませんよ。 (コンパイルするときは全角スペースを半角スペースに変換してからにしてください) import java.util.*; public class Main {   /**    * @param args the command line arguments    */   public static void main(String[] args) {     HashMap<String, String> ansExtDefForInputMapResult = new HashMap<String, String>();     ansExtDefForInputMapResult.put("a", "A");     ansExtDefForInputMapResult.put("b", "B");     ansExtDefForInputMapResult.put("c", "C");     HashMap<String, String> ansExtDefForInputMap = new HashMap<String, String>();     ansExtDefForInputMap.put("a", "A");     ansExtDefForInputMap.put("c", "C");     for (Iterator<String> iterator = ansExtDefForInputMapResult.keySet().iterator(); iterator.hasNext();) {       String extDefId = iterator.next();       if (!ansExtDefForInputMap.containsKey(extDefId)) {         iterator.remove();       }     }     System.out.println(ansExtDefForInputMapResult);   } }

kotoby2003
質問者

お礼

ありがとうございます! ただ、自己解決してました。 というか、こちらのサイトを見つけたので。 http://www.eeb.co.jp/2008/01/_36_foriterator.html OKWaveって、自己回答ができないんですよね・・・。

関連するQ&A