How to avoid "ConcurrentModificationException" while removing elements from `ArrayList` while iterating it? [duplicate] How to avoid "ConcurrentModificationException" while removing elements from `ArrayList` while iterating it? [duplicate] java java

How to avoid "ConcurrentModificationException" while removing elements from `ArrayList` while iterating it? [duplicate]


Use an Iterator and call remove():

Iterator<String> iter = myArrayList.iterator();while (iter.hasNext()) {    String str = iter.next();    if (someCondition)        iter.remove();}


As an alternative to everyone else's answers I've always done something like this:

List<String> toRemove = new ArrayList<String>();for (String str : myArrayList) {    if (someCondition) {        toRemove.add(str);    }}myArrayList.removeAll(toRemove);

This will avoid you having to deal with the iterator directly, but requires another list. I've always preferred this route for whatever reason.


Java 8 user can do that: list.removeIf(...)

    List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));    list.removeIf(e -> (someCondition));

It will remove elements in the list, for which someCondition is satisfied