Есть ли в Java записываемый итератор? - PullRequest
5 голосов
/ 10 мая 2010

В C + можно использовать итераторы для записи в последовательность. Простейшим примером будет:

vector<int> v;
for (vector<int>::iterator it = v.begin(); it!=v.end(); ++it) {
    *it = 42;
}

Мне нужно что-то более сложное - сохранить итератор в качестве члена класса для последующего использования. Но я не знаю, как получить такое поведение от итераторов Java.

Есть ли в Java итераторы для записи вообще?
Если нет, то что их заменяет?

Ответы [ 3 ]

8 голосов
/ 10 мая 2010

Методы ListIterator (которые можно получить с помощью List#listIterator()) имеют методы add() и set() что позволяет соответственно вставлять и заменять элемент по текущему итерированному индексу. Это единственный «записываемый итератор», который я могу себе представить в Java.

Не уверен, однако, является ли это точной заменой данного кода C ++, поскольку я не знаю C ++.

2 голосов
/ 10 мая 2010

Поскольку к индексам можно быстро и быстро получить доступ к массивам, вам не нужен объект-итератор. Разве не было бы достаточно сохранить индекс массива в этом члене класса? Это позволило бы прочитать и записать значение массива.

PS: Вы можете использовать ArrayList, который представляет собой автоматически растущий набор массивов, и использовать ListIterator, как описано в Balus, чтобы использовать подход итератор-объект.

0 голосов
/ 10 мая 2010

Похоже, вы хотите List (или, может быть, какую-то другую коллекцию, например Set) или массив.

Кроме того, вы можете просто сделать ваше содержимое изменчивым. Это выглядит глупо для целых чисел, но продолжая ваш пример

for (MutableInteger i : CollectionOfMInts) i.setTo(42);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...