Паттерн Iterator в Java

Паттерны   10 февраля 2013  Автор статьи:  

В данной статье я расскажу о преимуществах, которые дают коллекции. Кроме того, что коллекции реализуют различные структуры данных, которые вы можете использовать в своих программах, вы еще можете однотипно обращаться к различным коллекциям. Как, спросите вы, ведь коллекции реализуют принципиально разные структуры, где — то возможен обход коллекции по индексу, а где — то вообще такого понятия нет. Идея паттерна Iterator заключается в том, что к коллекции привязывается объект, который поможет обойти в некотором порядке все элементы коллекции. Рассмотрим интерфейс Iterator реализующий данный подход:

  • next() — возвращает следующий элемент коллекции, при этом итератор переходит на следующий элемент
  • hasNext() — возвращает существует ли следующий элемент
  • remove() — удаляет текущий элемент

Интерфейс Collection имеет метод iterator(), который возвращает итератор текущей коллекции. Поэтому обход произвольной коллекции можно реализовать следующим образом:

Collection c;
Iterator iterator = c.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next());
}

Более интересный итератор применяется в случае, если мы имеем дело с упорядоченной коллекцией, т.е коллекцией, которая реализует интерфейс List. Тогда в качестве итератора мы можем использовать ListIterator, который содержит следующие методы:

  • previous() — возвращает предыдущий элемент из коллекции, при этом итератор переходит на предыдущий элемент
  • hasPrevious() — возвращает существует ли предыдущий элемент
  • add(T e) — добавляет новый элемент перед текущим элементом
  • set(T e) — заменяет текущий элемент
  • nextIndex() — возвращает индекс следующего элемента
  • previousIndex() — возвращает индекс предыдущего элемента

Для того, чтобы получить ListIterator необходимо вызвать listIterator() у объекта, который реализует интерфейс List.

Научиться программировать

  • на Delphi

  • на Java

  • на C++