Иллюстрированный самоучитель по 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. 


Содержание раздела