Java HashMap - глубокая копия
Я просто пытаюсь найти лучшее решение, как сделать глубокую копию HashMap
. На этой карте нет объектов, которые реализуют Cloneable
. Я хотел бы найти лучшее решение, чем сериализация и десериализация.
Ответы
Ответ 1
Взгляните на Deep Cloning, в Google Code вы найдете библиотеку. Вы можете прочитать его на https://github.com/kostaskougios/cloning.
Как это работает, легко. Это может клонировать любой объект, и объект не должен реализовывать какие-либо интерфейсы, такие как serializable.
Cloner cloner = new Cloner();
MyClass clone = cloner.deepClone(o);
// clone is a deep-clone of o
Помните, что: это может клонировать тысячи объектов (если клонированный объект имеет много ссылок). Кроме того, копирование файлов или потоков может привести к сбою JVM.
Однако вы можете игнорировать некоторые экземпляры классов, такие как потоки и т.д. Стоит проверить эту библиотеку и ее источник.
Ответ 2
Я не думаю, что он может быть реализован в общем виде.
- Если у вас есть шанс просто реализовать клон, я бы пошел именно так.
- Немного сложнее создание карты типов, где вы просматриваете какой-то класс внедрения clone, основанный на классе каждого объекта.
- Когда объекты могут образовывать прямой ациклический график, я бы вообще сохранил карту от оригинала до клона каждого объекта, который я когда-либо видел, и проверить, не сделал ли я его уже
- Когда у вас есть общий график, проблема становится действительно неприятной. У вас могут быть странные ограничения порядка создания объектов, это может быть даже невозможно, если у вас есть окончательные поля.
В настоящее время я предлагаю переписать свой вопрос менее общим способом.