Получить доступ

Чем ListIterator отличается от обычного Iterator?

MiddleКоллекции
Коротко

ListIterator — только для списков: ход в обе стороны (hasPrevious, previous), индексы (nextIndex), изменение на месте — set и add.

  • set заменяет последний возвращённый элемент
  • add вставляет перед следующим
  • Для LinkedList — способ вставки за O(1) в найденную позицию

А ещё К потокобезопасности отношения не имеет

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

ListIterator существует именно потому, что у списка есть позиция и порядок: он знает индексы (nextIndex, previousIndex), умеет ходить назад и изменять список по месту. Множества и карты позиции не имеют, поэтому там доступен только базовый Iterator. Тонкость, о которой стоит помнить: set заменяет элемент, возвращённый последним вызовом next или previous, а add вставляет перед элементом, который вернёт следующий next, — оба метода привязаны к текущей позиции курсора, и без предшествующего next вызов set бросит IllegalStateException.

Что хотят услышать

  • Возможности сверх Iterator.

Частые ошибки

  • Пытаться получить ListIterator у Set.
  • Путать позицию вставки add с позицией замены set.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Позволяет двигаться в обе стороны: hasPrevious() и previous()
  • ✓Умеет заменять текущий элемент через set() и вставлять через add()
  • ✓Доступен только для List, но не для Set или Map
  • ✗Является потокобезопасным в отличие от Iterator

Что спросят дальше

  • Куда именно вставляет add относительно курсора?
  • Каким итератором обходят конкурентные коллекции и чем он особенный?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем