OriginalGriff
Вы не. То, что вы делаете, - это создание переменной с именем itr
который содержит итератор над коллекцией - вы получаете экземпляр этого, запрашивая у коллекции новый объект, который начинается с "указателя" на первый объект в коллекции.
Предположим, вы были правы, и в каждой коллекции был только один итератор? Что произойдет, если двум потокам потребуется доступ к одной и той же коллекции? Или даже два метода, оба из которых обращались к одной и той же коллекции по разным причинам, и в которых один из них косвенно вызывал другой? Или даже если вы "вложились" while
петли?
Arraylist list = new Arraylist();
While(list.hasnext) {
...
While(list.hasnext) {
...
}
...
}
Имея только один итератор, "внешний цикл" из двух будет серьезно испорчен "внутренним циклом". Это было бы плохо, потому что вы не должны "знать", как работает метод - вы называете его, и он делает свою работу. Но если есть только один итератор, если метод использует его, вам нужно будет знать, потому что вы не можете вызвать этот метод внутри своего собственного цикла без проблем.
Получение нового итератора, когда он вам нужен, означает, что таких проблем просто не бывает - потому что вы повторяете итератор по коллекции, а не по самой коллекции!