Неглубокое копирование Map создаёт новый экземпляр Map со ссылками на те же объекты, что и в оригинале. В Java есть несколько подходов для этого, каждый с разными плюсами и минусами.
Большинство реализаций Map предоставляют конструктор, который принимает другой Map в качестве аргумента. Это стандартный и самый простой способ:
Map<String, Object> originalMap = new HashMap<>();
Map<String, Object> shallowCopy = new HashMap<>(originalMap);
Этот метод простой и эффективный для однопоточных окружений.
Когда потокобезопасность важна, сам процесс копирования не синхронизируется. Если один поток копирует map, а другой его модифицирует, могут возникнуть несогласованности.
Чтобы избежать этой проблемы, используй Collections.synchronizedMap():
Map<String, Object> syncMap = Collections.synchronizedMap(originalMap);
Map<String, Object> shallowCopy = new HashMap<>(syncMap);
Это гарантирует, что map будет потокобезопасным во время операции копирования.
Метод clone() тоже может создать неглубокую копию, но у него есть важные ограничения:
CloneableObject, требуя явного приведения типовЛучшая практика: используй метод конструктора в большинстве случаев. Он:
Используй Collections.synchronizedMap() только когда одновременный доступ во время копирования — это реальная проблема, и избегай clone() в пользу подхода с конструктором.
При создании неглубокой копии Map с помощью конструктора новый экземпляр Map делится одинаковыми объектами пар ключ-значение с исходной Map.
Новый — ещё не проверен сообществом
Вы