То, что что-то может сделать больше, не делает его подходящим инструментом для работы.
В случае Iterator
против ListIterator
не каждая коллекция нуждается в поддержке двунаправленной итерации. Кроме того, количество мутирующей способности, которой обладает ListIterator
, не обязательно подходит для общей итерации. Наконец, ListIterator
предоставляет способы доступа к индексу элемента, но многие коллекции не имеют понятия индекса. Таким образом, можно сказать, что ListIterator
слишком мощный для большинства коллекций. Фактически, некоторые люди уже могут считать Iterator
«слишком мощным», поскольку он предоставляет метод remove
, который тоже не всегда уместен.
Основным направляющим фактором здесь является часть "Список" ListIterator
; в то время как Iterator
должен быть полезен для всех коллекций, ListIterator
специально предназначен для коллекций, которые, как и списки, имеют четкое линейное упорядочение своих элементов.
Несколько примеров, где ListIterator
было бы полезно:
- Одно- и двусвязные списки
- Списки массивов
- Другие коллекции с четко определенным линейным порядком
Некоторые примеры, где ListIterator
- это , а не подходит:
- Деревья (многие из них, так или иначе)
- Карты
- Установка
- Другая коллекция, не имеющая линейного порядка