Подтвердить что ты не робот

Java HashMap - глубокая копия

Я просто пытаюсь найти лучшее решение, как сделать глубокую копию HashMap. На этой карте нет объектов, которые реализуют Cloneable. Я хотел бы найти лучшее решение, чем сериализация и десериализация.

4b9b3361

Ответ 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, основанный на классе каждого объекта.
  • Когда объекты могут образовывать прямой ациклический график, я бы вообще сохранил карту от оригинала до клона каждого объекта, который я когда-либо видел, и проверить, не сделал ли я его уже
  • Когда у вас есть общий график, проблема становится действительно неприятной. У вас могут быть странные ограничения порядка создания объектов, это может быть даже невозможно, если у вас есть окончательные поля.

В настоящее время я предлагаю переписать свой вопрос менее общим способом.