из статьи про копирование
Поверхностное копирование копирует настолько малую часть информации, насколько это возможно. По умолчанию, клонирование в 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();
}
}