Если все, что вы делаете, - это простая однопроходная итерация (т. Е. Только hasNext()
и next()
, не remove()
), гарантируете ли вы линейное время и / или амортизируемые постоянные затраты на операцию? 1004 *
Указано ли это где-нибудь в Iterator
контракте?
Существуют ли структуры данных / Java Collection
, которые не могут быть повторены за линейное время?
java.util.Scanner implements Iterator<String>
. A Scanner
вряд ли является структурой данных (например, remove()
не имеет абсолютно никакого смысла). Это считается ошибкой дизайна?
Что-то вроде PrimeGenerator implements Iterator<Integer>
считается плохим дизайном, или это именно то, для чего Iterator
? (hasNext()
всегда возвращает true, next()
вычисляет следующее число по требованию, remove()
не имеет смысла).
Аналогично, имело бы смысл java.util.Random implements Iterator<Double>
?
Должен ли тип действительно реализовывать Iterator
, если он эффективно использует только одну треть своего API? (т.е. нет remove()
, всегда hasNext()
)