Интервью: Разработайте итератор для набора наборов

Разработайте итератор для набора наборов в Java. Итератор должен скрыть вложение, позволив Вам выполнить итерации всех элементов, принадлежащих всем наборам, как будто Вы работали с единственным набором

10
задан 24 July 2010 в 21:56
поделиться

2 ответа

Вот возможная реализация. Обратите внимание, что я оставил функцию remove () нереализованной:

public class MultiIterator <T> implements Iterator<T>{

    private Iterator<? extends Collection<T>> it;
    private Iterator<T> innerIt;
    private T next;
    private boolean hasNext = true;

    public MultiIterator(Collection<? extends Collection<T>> collections) {
        it = collections.iterator();    
        prepareNext();
    }

    private void prepareNext() {
        do {
            if (innerIt == null || !innerIt.hasNext()) {
                if (!it.hasNext()) {
                    hasNext = false;
                    return;
                } else
                    innerIt = it.next().iterator();
            }
        } while (!innerIt.hasNext());

        next = innerIt.next();
    }

    @Override
    public boolean hasNext() {
        return hasNext;
    }

    @Override
    public T next() {
        if (!hasNext)
            throw new NoSuchElementException();
        T res = next;
        prepareNext();
        return res;
    }

    @Override
    public void remove() {
        //TODO
    }

}
2
ответ дан 4 December 2019 в 02:49
поделиться

Сначала взглянем на реализацию итератора в java.util.LinkedList

http://www.docjar.com/html/api/java/util/LinkedList. java.html

Оттуда ваша задача проста - просто реализовать единственный итератор, учитывающий тот факт, что он выполняет итерацию по коллекциям.

С уважением.

0
ответ дан 4 December 2019 в 02:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: