Следующее остается в силе и описывает наблюдаемую проблему (см. Бит о том, какой тип копирования выполняется).Однако я не даю никакого ответа на вопрос , как выполнить глубокое копирование.
Вместо этого мое предложение состоит в том, чтобы проектировать объекты как неизменный , что полностью устраняет эту проблему.По моему опыту это работает очень хорошо для большинства тривиальных объектов (то есть объектов, которые не являются «контейнерами») и может упростить код и рассуждения об этом.
Из Javadoc для HashMap.values
:
Возвращает представление коллекции значений, содержащихся в этой карте. Коллекция поддерживается картой , поэтому изменения карты отражаются в коллекции , и наоборот ...
Возможно, это будетбыло бы полезно создать его копию?
HashMap<K,V> map = ....;
List<V> values = new ArrayList<V>(map.values());
Что, по сути, выполняет мелкую копию , которая «теперь отделена».Однако, если является мелкой копией , клонирование / копирование содержащихся объектов не выполняется .(См. Ответ βнɛƨн Ǥʋяʋиɢ, если глубокая копия семантика желательна: сам вопрос кажется немного расплывчатым по этому вопросу.)
Удачное кодирование