リストでfor文をまわしてリストの要素を削除したいとき……

horino 6,453views 更新:2014年6月23日

リストでfor文をまわしてリストの要素を削除したいとき、例えば

List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e")

for(String value : list){
    if(value.equals("b"))
        list.remove(value);
}

このような実装をすると、

java.util.ConcurrentModificationException

で怒られてしまいます。

いまfor文で見てる最中なんだから変更するなよ、ということです。

このようなときは

List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e")

for(int i = list.size() - 1; i >= 0; i--){
    if(list.get(i).equals("b"))
        list.remove(i);
}

というようにリストの後ろから見ていくとうまくいきます。”b”を削除して”c”のインデックスが変わっても、”c”はすでに見終わっているので影響がないからです。

 

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません