Почему при попытке удаление итератора в блоке while, возникает ошибка ConcurrentModificationException ? Объясните как работает итератор и как работать с итератором в Map или скиньте хорошую статейку) Спасибо)
package com.javarush.task.task08.task0817;

import java.util.*;

/*
Нам повторы не нужны
*/

public class Solution {
    public static Map<String, String> createMap() {
        //напишите тут ваш код
        String[] names = {"Андрей", "Василий", "Валерий", "Анатолий", "Михаил", "Михаил", "Влад", "Дима", "Илья", "Илья"};
        Map<String, String> map = new HashMap<>();
        for (int i = 0; i < names.length; i++) {
            map.put("a" + i, names[i]);
        }
        return map;

    }

    public static void removeTheFirstNameDuplicates(Map<String, String> map) {
        //напишите тут ваш код
        int count = 0;
        List<String> list = new ArrayList<>(map.values());
        Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, String> pair = iterator.next();
            for (int i = 0; i < list.size(); i++) {
                if (pair.getValue().equals(list.get(i))) {

                    count++;
                }
            }
            if (count > 1) {
                removeItemFromMapByValue(map, pair.getValue());
                count = 0;
            } else count = 0;
        }
    }

    public static void removeItemFromMapByValue(Map<String, String> map, String value) {
        Map<String, String> copy = new HashMap<>(map);
        for (Map.Entry<String, String> pair : copy.entrySet()) {
            if (pair.getValue().equals(value)) {
                map.remove(pair.getKey());
            }
        }
    }

    public static void main(String[] args) {
        Map<String, String> map = createMap();
        removeTheFirstNameDuplicates(map);

    }
}