Java HashMap – глубокая копия
Я просто пытаюсь найти лучшее решение, как сделать глубокую копию HashMap
. На этой карте нет объектов, реализующих Cloneable
. Я хотел бы найти лучшее решение, чем сериализацию и десериализацию.
Взгляните на 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
Помните: это может клонировать тысячи объектов (если клонированный объект имеет много ссылок). Кроме того, копирование файлов или streamов может привести к сбою JVM.
Тем не менее, вы можете игнорировать некоторые примеры classов, таких как streamи и так далее. Стоит проверить эту библиотеку и ее источник.
Я не думаю, что это может быть реализовано в общем виде.
- Если у вас есть шанс просто реализовать клон, я бы пошел именно так.
- Немного сложнее создание карты типов, где вы просматриваете какой-то class внедрения clone, основанный на classе каждого объекта
- Когда объекты могут образовывать прямой ациклический график, я бы вообще сохранил карту от оригинала до клона каждого объекта, который я когда-либо видел, и проверить, не сделал ли я его уже
- Когда у вас общий график, проблема становится очень неприятной. У вас могут быть странные ограничения порядка создания объектов, это может быть даже невозможно, если у вас есть конечные поля.
На данный момент я бы предложил переписать свой вопрос менее общим образом