Інтерфейс Iterator забезпечує пересування колекцією й перебір її елементів.
Методи Iterator-
hasNext() — повертає true, якщо є наступний елемент. Інакше повертає false.
-
next() — повертає наступний елемент. Породжує виняток NoSuchElementException, якщо такого немає.
-
remove() — видаляє поточний елемент. Породжує виняток IllegalStateException, якщо до цього не викликано метод next.
Порядок використання Iterator
-
Отримати ітератор початку колекції викликом методу iterator.
-
Використати цикл з попередньою перевіркою умови: доки hasNeмаxt повертає true.
-
Усередині циклу отримати наступний елемент викликом методу next і опрацювати отримане значення.
Для колекцій, які втілюють List, можна використати інтерфейс ListIterator.
Інтерфейс ListIterator розширює інтерфейс Iterator для забезпечення двонаправленого обходу списку та модифікації елементів.
Методи ListIterator- add(o) — вставляє об'єкт o у список перед елементом, який буде повернено наступним викликом next.
-
hasNext() — повертає true, якщо є наступний елемент. Інакше повертає false.
-
hasPrevious() — повертає true, якщо є попередній елемент. Інакше повертає false.
-
next() — повертає наступний елемент-об'єкт. Породжує виняток NoSuchElementException, якщо немає наступного елемента.
-
nextIndex() — повертає індекс (тип int) наступного елемента. Якщо такого немає, повертає довжину списку — кількість елементів у списку.
-
previous() — повертає попередній елемент-об'єкт. Проджує виняток NoSuchElementException, якщо такого немає.
-
previousIndex() — повертає індекс (тип int) попереднього елемента. Якщо попереднього елемента немає, повертає -1.
-
remove() — видаляє поточний елемент зі списку. Проджує виняток IllegalStateException, якщо до цього не було викликано next або previous.
-
set(o) — поточному елементу, повернутому останнім викликом next або previous, надає значення об'єкта o.
Див. приклад коду
package work;
import java.util.*;
public class Work
{ public static void main(String args[])
{ ArrayList a = new ArrayList();
a.add("C");
a.add("A");
a.add("E");
a.add("B");
a.add("D");
a.add("F");
System.out.print("Початковий вміст a: ");
Iterator i = a.iterator();
while (i.hasNext())
{ Object e = i.next();
System.out.print(e + " ");
}
System.out.println();
ListIterator l = a.listIterator();
while (l.hasNext())
{ Object e = l.next();
l.set(e + "*");
}
System.out.print(" Змінений вміст a: " + a);
System.out.println();
System.out.print(" Змінений вміст a у зворотному порядку: ");
while (l.hasPrevious())
{ Object e = l.previous();
System.out.print(e + " ");
}
System.out.println();
}
}
з таким виведенням
Початковий вміст a: C A E B D F
Змінений вміст a: [C*, A*, E*, B*, D*, F*]
Змінений вміст a у зворотному порядку: F* D* B* E* A* C*