Доброе время суток, в задаче "Нам повторы не нужны" реализовываю проверку на повторяющиеся значения в мэпе и повторяющиеся значения заношу в список для значений на удаление, но в процессе работы код, выкидывает ConcurrentModificationException в строке 38, не могу понять почему, я ведь использую итератор?
//получаю итератор для прохода по мапу
Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
//создаю список состоящий из значений мапа для сравнения значений мапа с ним
ArrayList<String> listOfValues = new ArrayList<>(map.values());
// создаю счетчик совпадений, если совпадений больше одного, значит значение в мэпе повторяется
int counter = 0;
// итоговый список со значениями, которые нужно удалить (повторяющиеся значения)
ArrayList<String> valuesToDel = new ArrayList<>();
// поехали по мэпу
while(iterator.hasNext()){
//получаем значение из мэпа
Map.Entry<String, String> pair = iterator.next();
String name = pair.getValue();
// сравниваю текущее значение из мэпа со списком всех значений
for(String v : listOfValues) {
if (name.equals(v)) {
counter++;
//Если список со значениями на удаление пуст,
//добавляю значение которое повторяется больше 1 раза
if (counter > 1 && valuesToDel.isEmpty()){
valuesToDel.add(name);
//Если список на удаление не пуст, проверяю,
//есть ли уже в списке на удаление текущее имя
} else if (counter > 1) {
//итератор для прохода по списку значений на удаление
Iterator<String> iteratorListToDel = valuesToDel.iterator();
while (iteratorListToDel.hasNext()) {
//если значения в списке нет, добавляем значение
if (!(iteratorListToDel.next().equals(name))){
valuesToDel.add(name);
} else {
System.out.println("Имя уже есть");
}
}
}
}
counter = 0;
}