Найти тему
DEBAGanov

Java 815. Почему нет метода iterator.add() чтобы добавить элементы в коллекцию?

В интерфейсе java.util.Iterator нет метода add(), так как это лишь итератор для прохода по элементам коллекции, и его задача заканчивается на чтении элементов. Если вам нужно добавить элементы в коллекцию, используйте соответствующие методы коллекции, такие как add() для списков List или HashSet, или put() для карт Map. Пример использования метода add():

List<String> list = new ArrayList<>();
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String element = it.next();
if (someCondition) {
list.add(newElement); // Ошибка ConcurrentModificationException, вызванная перебором и модификацией внутри оного }
}

list.add(newElement); вызовет ошибку ConcurrentModificationException, так как мы не можем изменять коллекцию во время итерации по ней.

Если вы хотите добавить элементы в коллекцию, в то время как вы перебираете её элементы, используйте ListIterator, который содержит метод add() для этой цели. Вы можете получить ListIterator, вызвав метод listIterator() на списке:

List<String> list = new ArrayList<>();
ListIterator<String> it = list.listIterator();
while (it.hasNext()) {
String element = it.next();
if (someCondition) {
it.add(newElement);
// Добавление элемента в список, вызов не вызовет
ConcurrentModificationException }
}

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov