Вопрос такой
Функционально обе строчки кода одинаковы
while (cats.iterator().hasNext()) {
System.out.println(cats.iterator().next());
}
и
for (Cat cat : cats) {
System.out.println(cat);
}
обе должны выводить объекты Cat из множества
Однако в первом варианте функция итератора next() не отрабатывает и происходит зацикливание на первом объекте. Ранее ее использовал со стрингами и интами без проблем. Со своим созданным объектом возникли траблы.
Из-за чего возникает такая ситуация?
package com.javarush.task.task08.task0819;
import java.util.HashSet;
import java.util.Set;
/*
Set из котов
*/
public class Solution {
public static void main(String[] args) {
Set<Cat> cats = createCats();
cats.remove(cats.iterator().next());
printCats(cats);
}
public static Set<Cat> createCats() {
Set<Cat> cats = new HashSet<>();
cats.add(new Cat());
cats.add(new Cat());
cats.add(new Cat());
return cats;
}
public static void printCats(Set<Cat> cats) {
while (cats.iterator().hasNext()) {
System.out.println(cats.iterator().next());
}
/*
for (Cat cat : cats) {
System.out.println(cat);
}
*/
}
public static class Cat {
Cat() {
}
}
}