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

Анализатор обнаружил, что коллекция, не предназначенная для параллельного изменения, модифицируется во время итерации по ней\. Это может привести к возникновению исключения 'ConcurrentModificationException'\.

Рассмотрим несколько примеров кода с ошибкой\.

Пример 1:

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



Пример 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);
  }
}
```



Пример 3:

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



При этом, анализатор не будет выдавать предупреждение если коллекция позволяет параллельное изменение:

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



Кроме того, предупреждение не будет выдано если сразу после модификации осуществляется выход из цикла:

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