Что такое бесконечный итератор? Зачем использовать это? - PullRequest
4 голосов
/ 06 марта 2012

Я пытаюсь понять следующий вопрос, на который я должен ответить в задании. Это вопрос о бесконечных итераторах. Где они будут полезны? Я думал, что итераторы используются для обхода коллекции как:

Iterator itr = ArrayList.iterator();
while (itr.hasNext())
{
    System.out.println(itr.next());
}

как только itr достигнет конца коллекции, это будет сделано, если в середине итерации не должно быть никаких других операций. Так зачем вообще бесконечные итераторы?

1 Ответ

6 голосов
/ 06 марта 2012

Бесконечный итератор делает именно то, что делает ваш код выше, за исключением того, что он перематывает при попадании в конечные элементы.

Возможно, этот пример поможет проиллюстрировать, как он может пригодиться:

Let l = [1,2,3,4,5,6,7,8]

int i = 0;
InfiniteIterator itr = l.infiniteIterator();
while(itr.hasNext()) {
    if(i % 2 == 0) {
        itr.remove();
    }
    i++;
}

Состояние l на каждой итерации:

[1,2,3,4,5,6,7,8] # i = 0, e = 1
[2,3,4,5,6,7,8] # i = 1, e = 2
[2,3,4,5,6,7,8] # i = 2, e = 3
[2,4,5,6,7,8] # i = 3, e = 4
[2,4,5,6,7,8] # i = 4, e = 5
[2,4,6,7,8] # i = 5, e = 6
[2,4,6,7,8] # i = 6, e = 7
[2,4,6,8] # i = 7, e = 8
[2,4,6,8] # i = 8, e = 2
[4,6,8] # i = 9, e = 4
[4,6,8] # i = 10, e = 6
[4,8] # i = 11, e = 8
[4,8] # i = 12, e = 4
[8] # i = 13, e = 8
[8] # i = 14, e = 8
[] # while loop exits
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...