Java: удалить элементы из массива при использовании итератора - PullRequest
0 голосов
/ 11 февраля 2012

Я использую список объектов, каждый объект содержит номер и имя строки. когда объект с одинаковым именем дважды в моем списке, я обновляю номер одного из них на 1 и удаляю другой, пока все хорошо.

но когда я удаляю объект из этого списка, итератор все еще возвращает тот, который я только что удалил, его больше нет в списке, но я думаю, что он все еще находится в том же месте.

пример:

x 1;
x 1;
y 1;
z 1;

я удаляю второй x и обновляю счетчик другого:

x 2;
y 1;
z 1;

Но теперь итератор возвращает мне значение x 1, которое в начале было на второй позиции, для итератора оно все еще выглядит так:

x 1;
[x1];
y 1;
z 1;

(По крайней мере, это то, что я думаю, что происходит, пытаясь сделать это несколько часов ..)

Есть ли способ сообщить итератору, что список изменился? я только что прочитал о методе итератора remove (), я прямо здесь?

1 Ответ

2 голосов
/ 11 февраля 2012

Да, вы должны использовать метод remove на итераторе, чтобы удалить элемент из коллекции, а не удалять элемент из коллекции напрямую. В общем случае, если вы добавляете или удаляете элементы во время итерации по коллекции, итератор больше не будет работать правильно. Однако вызов remove для итератора будет работать правильно (если он реализован).

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

Поведение итератора не определено, если базовая коллекция изменена во время выполнения итерации любым другим способом, кроме вызова [remove].


В качестве примечания, реальная проблема, которую вы пытаетесь решить, кажется, очень похожа на проблему в этом вопросе, поэтому вы можете также посмотреть ответы здесь для альтернативных (более простых) подходов:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...