JavaRush /Java блог /Архив info.javarush /Коллекции. Map. Удаление.
oktava
23 уровень
Санкт-Петербург

Коллекции. Map. Удаление.

Статья из группы Архив info.javarush
Доброго времени суток. Вопрос в следующем, каким образом происходит удаление элементов из коллекции Map. Пытаюсь решить очередную задачу и не могу продвинуться дальше, так как не понимаю по какому принципу происходит удаление из коллекции. Суть в том, чтобы удалить одинаковые элементы из коллекции, сравнение происходит по значению (value). Из лекций 8-го уровня я понял, что "iterator" - это что-то вроде ссылки на нашу коллекцию. Поэтому создал 2 таких ссылки и путем сравнения элементов в коллекции решил удалять элементы на которые ссылается эта ссылка(объект) iterator2. Разъясните, почему я делаю не правильно. Очень хочу понять где я не прав. Спасибо всем кто отзовется. for (Iterator> iterator1 = map.entrySet().iterator(); iterator1.hasNext();){ HashMap.Entry pair1 = iterator1.next(); for (Iterator> iterator2 = map.entrySet().iterator(); iterator2.hasNext();) { HashMap.Entry pair2 = iterator2.next(); if(pair1.getValue().equals(pair2.getValue())){ map.remove(pair2.getKey()); } } } Еще вариант реализации удаления из коллекции Iterator> iterator1 = map.entrySet().iterator(); while(iterator1.hasNext()){ Map.Entry pair1 = iterator1.next(); Iterator> iterator2 = map.entrySet().iterator(); while(iterator2.hasNext()){ Map.Entry pair2 = iterator2.next(); if (pair1.getValue().equals(pair2.getValue())){ iterator2.remove(); } } }
Комментарии (14)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Duckpool Уровень 12 Expert
19 декабря 2019
Спасибо!
Fry Уровень 41
1 сентября 2015
Первое.
Map не является реализацией интерфейса Collection, тем не менее, является частью фреймворка Collections.
Итератор — внутренний класс в коллекции. удалять и работать с коллекцией лучше через итератор, так безопаснее. Если удаляешь элемент из коллекции, порядок элементов в коллекции меняется. Поэтому если ты бежишь по коллекции и в тот же момент удаляешь из нее элементы, то в таком варианте можно получить непредвиденный результат, например NPE. Поэтому лучше удалять через итератор, там все эти моменты предусмотрены.