Поясните, пожалуйста, суть правильного решения в public static void removeTheFirstNameDuplicates(Map<String, String> map) . Почему нельзя просто пробежаться одним циклом по map (for (String name : map.values())) и потом вызвать removeItemFromMapByValue(map, name), передав туда map и name цикла?
Ruth
28 уровень
Поясните, пожалуйста, код
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia Volkova Java Developer в DXC Master
11 сентября 2021, 15:57
Цикл for each не подходит для удаления (нельзя удалять из той коллекции, которую этим циклом перебираешь).
Подробности тут.
0
Ruth
11 сентября 2021, 16:01
Да, но изначально я перебрала map через for each, а только потом map и значения передала в метод, который занимается удалением. И там уже реализована копия map, с которой работает удаление
0
Ksenia Volkova Java Developer в DXC Master
11 сентября 2021, 16:06
А что это меняет? Ты внутри for each вызываешь метод, который удаляет элементы из коллекции, которую ты перебираешь этим циклом for each.
Во втором методе цикл идет по одной коллекции (копии), а удаление происходит из другой - поэтому в этом втором методе все ок. Но для первого метода перебираемая коллекция и изменяемая - одна и та же.
0
Ruth
11 сентября 2021, 16:35
Точно... Я же вызываю второй метод в пределах цикла. Сразу и не дошло. А в правильном решении первым циклом я перебираю копию и спокойно могу вызвать метод, который удаляет из оригинала...
Спасибо большое за объяснение!
0