Иллюстрированный самоучитель по Java

Интерфейс Listlterator

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

В интерфейс Listiterator добавлены следующие методы:

  • void add (Object element) – добавляет элемент element перед текущим элементом;
  • boolean hasPrevious () – возвращает true, если в коллекции есть элементы, стоящие перед текущим элементом;
  • int nextindex() – возвращает индекс текущего элемента; если текущим является последний элемент коллекции, возвращает размер коллекции;
  • Object previous () – возвращает предыдущий элемент и делает его текущим;
  • int previous index () – возвращает индекс предыдущего элемента;
  • void set (Object element) – заменяет текущий элемент элементом element; выполняется сразу после next () или previous ().

Как видите, итераторы могут изменять коллекцию, в которой они работают, добавляя, удаляя и заменяя элементы. Чтобы это не приводило к конфликтам, предусмотрена исключительная ситуация, возникающая при попытке использования итераторов параллельно "родным" методам коллекции. Именно поэтому в листинге 6.5 действия с итератором заключены в блок tryUcatch(){}.

Изменим окончание листинга 6.5 с использованием итератора Listiterator.

// Текст листинга 6.1…
//…
Listiterator lit = v.listlterator(); // Получаем итератор вектора
// Указатель сейчас находится перед началом вектора
try{
while(lit.hasNext()) // Пока в векторе есть элементы
System.out.println(lit.next()); // Переходим к следующему
// элементу и выводим его
// Теперь указатель за концом вектора. Пройдем к началу
while (lit .hasPrevious ())
System, out .printlnf lit .previblis ());:
}catch (Exception e) ()

Интересно, что повторное применение методов next () и previous () друг за другом будет выдавать один и тот же текущий элемент. Посмотрим теперь, какие возможности предоставляют классы-коллекции Java 2.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.