Урок 17

Интерфейс Iterator


Перебор содержимого коллекции может быть осуществлен двумя способами: c помощью цикла for each и с помощью итератора.

Итератор позволяет осуществлять обход коллекции и при желании удалять избранные элементы. Используется интерфейс Iterator<E>. Чтобы получить объект итератора вызовите метод Iterator<E> iterator().

Методы интерфейса Iterator:

  • boolean hasNext() - возвращает true, если есть еще элементы. В противном случае возвращает false.
  • E next() - возвращает следующий элемент. Если следующий элемент коллекции отсутствует, то метод next() генерирует исключение NoSuchElementException.
  • void remove() - удаляет текущий элемент. Возбуждает исключение IllegalStateException, если предпринимается попытка вызвать remove(), которой не предшествовал вызов next().

Пример 1. Использование интерфейса Iterator

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorDemo {
    public static void main(String[] args) {
        // Create an array list.
        List<String> arrayList = new ArrayList<>();

        // Add elements to the array list.
        arrayList.add("C");
        arrayList.add("A");
        arrayList.add("E");
        arrayList.add("B");
        arrayList.add("D");
        arrayList.add("F");

        // Use iterator to display contents of arrayList.
        System.out.print("Original contents of arrayList: ");
        Iterator<String> iterator = arrayList.iterator();
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.print(element + " ");
        }
        System.out.println();
    }
}

Все классы в каркасе коллекций усовершенствованы таким образом, чтобы реализовывать интерфейс Iterable. Это означает, что содержимое коллекции можно перебрать, организовав цикл for в стиле for each. Конструкция for each скрывает итератор, поэтому нельзя вызвать метод remove().

 



0 comments
Leave your comment: