Java HashMap - 深度复制

2022-09-02 13:36:29

我只是试图找出最佳解决方案 如何制作深版.此映射中没有实现 的对象。我想找到比序列化和反序列化更好的解决方案。HashMapCloneable


答案 1

看看Deep Cloning,在Google Code上你可以找到一个库。您可以在 https://github.com/kostaskougios/cloning 上阅读它。

它的工作原理很简单。这可以克隆任何对象,并且该对象不必实现任何接口,例如可序列化。

Cloner cloner = new Cloner();
MyClass clone = cloner.deepClone(o);
// clone is a deep-clone of o

但请注意:这可能会克隆数千个对象(如果克隆的对象具有那么多引用)。此外,复制文件或流可能会使 JVM 崩溃。

但是,您可以忽略类的某些实例,如流等。值得一看这个库及其源代码。


答案 2

我不认为它可以以通用的方式实现。

  • 如果你有机会简单地实现克隆,我会这样做。
  • 更复杂的是创建一个类型映射,您可以在其中根据每个对象的类查找某种克隆实现类。
  • 当对象可能形成有向无环图时,我通常会保留一个从我见过的每个对象的原始到克隆的Map,并检查我是否已经制作了它。
  • 当你有一个通用的图表时,问题变得非常讨厌。您可能对对象创建顺序有奇怪的约束,当您拥有最终字段时,甚至可能是不可能的。

现在,我建议以一种不那么笼统的方式重写你的问题。