Обычно считается хорошим стилем передавать Collection
и друзей вместо Iterator
(см. этот раздел часто задаваемых вопросов ), поэтому я рекомендую что-то вроде
public final class IntegerRange implements Set<Integer> {
final LinkedHashSet<Integer> backingList;
public IntegerRange(final int start, final int count) {
backingList = new LinkedHashSet(count, 1.0f);
for (int i=0; i < count; i++) {
backingList.set(i, start + i);
}
}
/** Insert a bunch of delegation methods here */
}
, а затем просто используйте .iterator()
, когда вам нужно передать Iterator
в любой фреймворк, который вы используете.
ОБНОВЛЕНИЕ: Очевидно, этот код не ленив. Если вы не можете позволить себе дополнительные накладные расходы на хранение (потенциально) 2 ^ 32-1 Integer
s, вам следует использовать другое решение. Кроме того, ничто в типе не гарантирует, что диапазон будет отсортирован (даже если он основан на реализации). Если вам нужно гарантировать сортировку, вы можете изучить реализацию SortedSet и поддержку TreeSet , но для построения диапазона потребуется больше времени. Честно говоря, если вы заинтересованы в том, чтобы получить правильные детали, возможно, вам стоит поискать библиотеку. Гобелен имеет внутреннюю версию , например.