из статьи про копирование Поверхностное копирование копирует настолько малую часть информации, насколько это возможно. По умолчанию, клонирование в Java является поверхностным, т.е. Object class не знает о структуре класса, которого он копирует.
>Твое собственное множество AmigoSet реализует интерфейс Cloneable. Однако, не клонируется правильно.
неправильно это как?
Требование задания: Напиши свою реализацию метода Object clone(), сделай поверхностное клонирование.
но ведь оно "по умолчанию" поверхностное.. проясните ситуацию , что происходит в правильном варианте клонирования со ссылками у мапы и сета нашей задачи
public class AmigoSet<E> extends AbstractSet<E> implements Serializable, Cloneable, Set<E> {

    private static final Object PRESENT = new Object();
    private transient HashMap<E, Object> map;

    public AmigoSet(Collection<? extends E> collection) {
        this.map = new HashMap<>(Math.max((int) (collection.size() / .75f) + 1, 16));
        addAll(collection);
    }

    @Override
    public Object clone() {
        try {
            AmigoSet<E> newSet = (AmigoSet<E>) super.clone();
            newSet.map = (HashMap<E, Object>) map.clone();
            return newSet;
        } catch (Exception e) {
            throw new InternalError();
        }
    }