В Java существует ли перезаписываемый итератор?

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

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

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

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

5
задан Łukasz Lew 10 May 2010 в 12:31
поделиться

3 ответа

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

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

8
ответ дан 13 December 2019 в 22:03
поделиться

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

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

for (MutableInteger i : CollectionOfMInts) i.setTo(42);
0
ответ дан 13 December 2019 в 22:03
поделиться

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

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

2
ответ дан 13 December 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: