Member 13276583 Ответов: 1

Не могли бы вы объяснить мне концепцию коллекции


Список коллекции = новый ArrayList();
Итератор itr =list.iterator();
Пока(ИТР.hasNext)

Зачем мы создаем еще один объект "itr", если интерфейс итератора реализован и в классе Arraylist ?
Почему мы не можем запрограммировать его?
Список класса ArrayList = девичестве класса ArrayList();
В то время как(список.hasnext)

Что я уже пробовал:

Не могли бы вы объяснить на примере

1 Ответов

Рейтинг:
4

OriginalGriff

Вы не. То, что вы делаете, - это создание переменной с именем itr который содержит итератор над коллекцией - вы получаете экземпляр этого, запрашивая у коллекции новый объект, который начинается с "указателя" на первый объект в коллекции.

Предположим, вы были правы, и в каждой коллекции был только один итератор? Что произойдет, если двум потокам потребуется доступ к одной и той же коллекции? Или даже два метода, оба из которых обращались к одной и той же коллекции по разным причинам, и в которых один из них косвенно вызывал другой? Или даже если вы "вложились" while петли?

Arraylist list = new Arraylist();
While(list.hasnext) {
   ...
   While(list.hasnext) {
      ...
   }
...
}

Имея только один итератор, "внешний цикл" из двух будет серьезно испорчен "внутренним циклом". Это было бы плохо, потому что вы не должны "знать", как работает метод - вы называете его, и он делает свою работу. Но если есть только один итератор, если метод использует его, вам нужно будет знать, потому что вы не можете вызвать этот метод внутри своего собственного цикла без проблем.

Получение нового итератора, когда он вам нужен, означает, что таких проблем просто не бывает - потому что вы повторяете итератор по коллекции, а не по самой коллекции!