Java HashMap – 深层复制
我只是想找出如何制作HashMap
的深层副本的最佳解决方案。 此映射中没有实现Cloneable
对象。 我想找到比序列化和反序列化更好的解决方案。
看一下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崩溃。
但是,您可以忽略某些类的实例,例如streams等。 值得检查这个库及其来源。
我不认为它可以通用的方式实现。
- 如果你有机会简单地实现克隆,我会这样做。
- 更复杂的是创建一个类型映射,您可以根据每个对象的类查找某种克隆实现类
- 当对象可能形成有向无环图时,我通常会将原始地图保存到我见过的每个对象的克隆中,并检查我是否已经制作了它
- 当你有一个通用图表时,问题变得非常糟糕。 您可能对对象创建顺序有奇怪的约束,当您有最终字段时甚至可能不可能。
现在,我建议以较不一般的方式重写你的问题