Задачу уже решил через pets.removeAll(cats). Но почему не сработало такое решение?
public class Solution {
public static void main(String[] args) {
Set<Cat> cats = createCats();
Set<Dog> dogs = createDogs();
Set<Object> pets = join(cats, dogs);
printPets(pets);
removeCats(pets, cats);
printPets(pets);
}
public static Set<Cat> createCats() {
Set<Cat> result = new HashSet();
Cat cat1 = new Cat();
Cat cat2 = new Cat();
Cat cat3 = new Cat();
Cat cat4 = new Cat();
result.add(cat1);
result.add(cat2);
result.add(cat3);
result.add(cat4);
return result;
}
public static Set<Dog> createDogs() {
Set<Dog> result = new HashSet();
Dog dog1 = new Dog();
Dog dog2 = new Dog();
Dog dog3 = new Dog();
result.add(dog1);
result.add(dog2);
result.add(dog3);
return result;
}
public static Set<Object> join(Set<Cat> cats, Set<Dog> dogs) {
Set<Object> set = new HashSet();
set.addAll(cats);
set.addAll(dogs);
return set;
}
public static void removeCats(Set<Object> pets, Set<Cat> cats) {
Iterator<Object> itr1 = pets.iterator();
Iterator<Cat> itr2 = cats.iterator();
while(itr1.hasNext()) {
Object o = itr1.next();
while(itr2.hasNext()) {
Cat c = itr2.next();
if(o == c) itr1.remove();
}
}
}
public static void printPets(Set<Object> pets) {
for(Object o: pets) {
System.out.println(o);
}
}
public static class Cat {
}
public static class Dog {
}
}
Ner'Zhul
25 уровень
Вопрос только по методу removeCats
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
IceBergMaster
5 июля 2019, 11:46решение
Потому что после окончания внутреннего цикла, второй итератор не обнуляется, и второй раз этот цикл уже не запустится.
+1
Ner'Zhul
5 июля 2019, 15:29
Спасибо. Уже запутался с этими коллекциями.
0