IteratorにおけるConcurrentModificationException

テストしてみたらConcurrentModificationExceptiontoなるエラーが発生。わけわからずしらべていくとどうやらIteratorの原因。このプログラムはSortedMapData(Mapオブジェクト)を持ち回りデーターを追加、削除を一連の流れで起こっているため、同期がとれずエラーになったらしいとのこと。

解決法をまたググってみるとIteratorを使わずFor文で解決できるとか。
ただし、処理上Map型のキーを操作したいためちょと悩む。(-_-)

とりえあえずkeySetのSetインターフェイスはCollectionをスーパーインターフェイスとして持つのでListに変換してみました。

/**** 修正前 ****/
Set keyset = SortedMapData.keySet();
Iterator i = keyset.iterator();
while(i.hasNext()){

    String key = (String)i.next();

   /* keyを使った処理 */
}
/**** 修正後 ****/
Set keyset =SortedMapData.keySet();
List list = new ArrayList(keyset);
                //Listに変換
for(int i=0; i < list.size(); i++){
               
    String key = (String)list.get(i);
               
     /* keyを使った処理 */
}

これでいけたかな?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


This site uses Akismet to reduce spam. Learn how your comment data is processed.