# V6053. Collection is modified while iteration is in progress. ConcurrentModificationException may occur.

The analyzer has detected a collection that gets modified while being iterated, although it was not designed for concurrent modification. This may raise a 'ConcurrentModificationException'.

Consider several examples of faulty code.

Example 1:

    List<Integer> mylist = new ArrayList<>();
    ....
    for (Integer i : mylist)
    {
      if (cond)
      {
        mylist.add(i * 2);
      }
    }

Example 2:

    List<Integer> myList = new ArrayList<>();
    ....
    Iterator iter = myList.iterator();
    while (iter.hasNext())
    {
      if (cond)
      {
        Integer i = (Integer) iter.next();
        myList.add(i * 2);
      }
    }

Example 3:

    Set<Integer> mySet = new HashSet<>();
    ....
    mySet.stream().forEach(i -> mySet.add(i * 2));

However, the analyser will keep silent if a collection permits concurrent modification:

    List<Integer> mylist = new CopyOnWriteArrayList<>();
    ....
    for (Integer i : mylist)
    {
      if (cond)
      {
        mylist.add(i + 1);
      }
    }

It will also keep silent if the loop terminates immediately after the collection is modified:

    List<Integer> mylist = new ArrayList<>();
    ....
    for (Integer i : mylist)
    {
      if (cond)
      {
        mylist.add(i + 1);
        break;
      }
    }

This diagnostic is classified as:

CERT-MSC06-J

You can look at examples of errors detected by the V6053 diagnostic.