Объясните пожалуйста. По заданию мне нужно было удалить все объекты типа Cat из множества pets. Когда я пытался проходить по основному множеству и удалять значения - вылетала ошибка ConcurrentModificationException. Но если скопировать основное множество в временное и пройтись по временному а удалять именно из основного то всё работает. Только не могу понять почему, мы копируем объекты и передаём ссылки на эти объекты в новое множество соответственно новое множество, должно вести к тем же объектам что и основное и программа не должна работать. Я понимаю, что я что-то но понимаю))) объясните пожалуйста.
public static void removeCats(Set<Object> pets, Set<Cat> cats) {
        //напишите тут ваш код
        Set<Object> copyPets = new HashSet<>(pets);
        Iterator<Object> iterator = copyPets.iterator();
        while (iterator.hasNext()) {
            Object getPet = iterator.next();
            for (Cat cat : cats) {
                if (getPet == cat) {
                    pets.remove(getPet);
                }
            }
        }
    }