Как удалить первый элемент коллекции, используя iterator

145
08 декабря 2021, 03:00

Если попытаться вызвать iterator.remove() до вызова next(), то мы получим исключение IllegalStateException. Как можно удалить первый элемент коллекции, используя iterator?

Iterator iterator = a.entrySet().iterator();
while (iterator.hasNext()) {
    iterator.remove();
}
Answer 1

Метод remove() в классе java.util.Iterator удаляет элемент, который был возвращен последним вызовом метода next(). Если вам надо удалить первый элемент именно с помощью итератора, то:

Iterator iterator = a.entrySet().iterator();
if(iterator.hasNext) {
    iterator.next(); // Вернет "первый" элемент
    iterator.remove(); // Удалит "первый" элемент
}

Но обратите внимание! В вашем примере вы получаете итератор коллекции реализующую интерфейс Set (вы получаете эту реализацию через метод entrySet()). Поэтому вы удаляете первый элемент возвращаемый итератором. Заметьте, не просто первый элемент, а именно первый элемент возвращаемый итератором, т.к. все классы реализующие интерфейс Set не дают никаких гарантий касательно порядка хранения элементов, кроме LinkedHashSet и LinkedHashMap. Если вы не используете один из этих двух последних классов, то в вашем случае вообще нельзя говорить о первом элементе коллекции.

И последнее - заглянув в документацию, вы могли бы сами легко ответить на собственный вопрос.

READ ALSO
Как поместить строку в одинарные кавычки?

Как поместить строку в одинарные кавычки?

Как добавить в конец строки символ " ' " не вызывая два раза builderreplace?

163
Intellij Idea - как перевести весь java проект на UTF-8

Intellij Idea - как перевести весь java проект на UTF-8

У меня есть старый проект, отличный от кодировки UTF-8, мне нужен перевод всего проекта в UTF-8Работаю в Intellij Idea

189
Uncompilable source code - Erroneous tree type: <any>

Uncompilable source code - Erroneous tree type: <any>

Добрый день мне необходимо подсчитать суммарную зарплату сотрудников по подразделениямДанные я загружаю из csv файла

294