Iterator может пройти по любому типу Collection, включая списки, множества и очереди. ListIterator же специально создан для работы только с реализациями List.
Iterator поддерживает односторонний обход — ты можешь двигаться только вперёд по элементам. ListIterator позволяет двусторонний обход, давая возможность двигаться как вперёд, так и назад по списку.
Iterator не предоставляет доступ к индексам элементов во время обхода. ListIterator предлагает методы на основе индекса, такие как:
nextIndex() — возвращает индекс следующего элементаpreviousIndex() — возвращает индекс предыдущего элементаIterator запрещает добавлять элементы во время итерации. Попытка это сделать выбросит ConcurrentModificationException. ListIterator разрешает добавлять элементы в любой момент во время обхода, используя метод add().
Iterator не позволяет изменять существующие элементы. ListIterator предоставляет метод set(E e), который заменяет значение элемента, который последний раз вернул next() или previous().
| Возможность | Iterator | ListIterator |
|---|---|---|
| Совместимые типы | Все Collection | Только списки |
| Направление обхода | Только вперёд | Вперёд и назад |
| Доступ по индексу | Нет | Да |
| Добавление элементов | Нет | Да |
| Замена элементов | Нет | Да |
Главный вывод: Используй Iterator для общего обхода разных типов коллекций. Выбирай ListIterator, когда работаешь со списками и тебе нужны дополнительные возможности: двусторонний обход, доступ по индексу или изменение элементов прямо во время итерации.
ListIterator можно использовать для обхода любого типа Collection, включая Sets и Queues, что делает его более универсальным, чем Iterator.
Новый — ещё не проверен сообществом
Вы