Вопрос по итераторам Java

216
05 марта 2018, 00:28

Объясните мне пожалуйста,почему когда я работаю с итератором и забываю проинициализировать сам итератор, то такой цикл будет продолжаться бесконечно?

  //этот работает верно 
  Iterator<Object> iterator2 = set.iterator(); 
  while(iterator.hasNext())
  set2.add(iterator.next());
//а вот этот уже начнет разгонять мой процессор до сверхскоростей и все бестолку
while(set.iterator().hasNext())
    set2.add(set.iterator().next());
Answer 1

set.iterator() всегда создает новый итератор; в первой части вашего кода вы создаете его только один раз:

Iterator<Object> iterator2 = set.iterator();

и так он в последующем цикле наконец исчерпается, iterator.hasNext() возвратит значение falseи цикл онончится,

но во второй части вы его создаете в цикле опять и опять:

while(set.iterator().hasNext())

и так как он всегда свежий, метод .hasNext() опять и опять возвращает значение true и поэтому цикл опять и опять продолжается - до бесконечности.

READ ALSO
как узнать количество ссылок на объект в java

как узнать количество ссылок на объект в java

вопрос как можно получить количество ссылок на экземпляр объекта или хотя бы больше 1 ли их

140
Java. Вопрос по архитектуре сервера для игры

Java. Вопрос по архитектуре сервера для игры

Думаю над архитектурой сервера для игры и встал вопрос над тем, как обрабатывать подключения клиентовПротокол - tcp/ip

175
Selenium WebDriver ожидание перед click()

Selenium WebDriver ожидание перед click()

Сейчас мои тесты выглядят примерно так

139
тормозит нажатие ListVeiw android

тормозит нажатие ListVeiw android

Доброго Впемени суток!!!Возникла проблемма c ListVeiw,повесил на него нажатие

170