Делает ли итераторы какой-либо побочный эффект для своего состояния объекта? - PullRequest
0 голосов
/ 22 ноября 2010

Технически говоря, что всякий раз, когда мы меняем указатель объекта (средняя позиция индекса), это влияет на состояние объекта?тогда как это может быть безопасно достигнуто?


обновлено:

//Java:
public static Collection reverse(Collection collection) {
    LinkedList newCollection = new LinkedList();
    Iterator i = collection.iterator();
    while(i.hasNext()) {
      newCollection.addFirst(i.next());
    }
    return newCollection;
  }

Рассмотрим фрагмент кода, при вызове функции addFirst(i.next()) внутренне изменяется состояние объекта i?

1 Ответ

4 голосов
/ 22 ноября 2010

Он влияет на состояние итератора (иначе он никогда не сможет изменить, какое значение он вернул), но обычно он не должен влиять на состояние коллекции, по которой он повторяется. (В некоторых случаях, конечно, данные могут повторяться только один раз - представьте себе поток значений, поступающий с сервера.)

Представьте себе физический список предметов, и несколько человек итерируют по нему. Каждый человек может указывать пальцем на то, куда он попал в списке. Во время итерации их палец будет двигаться (состояние мутации), но сам список не изменится.

РЕДАКТИРОВАТЬ: Как отмечено в комментариях, итераторы могут поддерживать операцию remove(), которая повлияет на базовую коллекцию, если она поддерживается.

...