﻿# 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:

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



Example 2:

```cpp
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:

```cpp
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:

```cpp
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:

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