我只是想找出如何制作深拷贝的最佳解决方案HashMap
。此地图中没有实现 的对象Cloneable
。我想找到比序列化和反序列化更好的解决方案。
问问题
44183 次
3 回答
13
看看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 崩溃。
但是,您可以忽略某些类的实例,例如流等。值得检查这个库及其来源。
于 2012-10-24T12:38:09.887 回答
3
我认为它不能以通用方式实现。
- 如果您有机会简单地实现克隆,我会这样做。
- 更复杂的是创建一个类型映射,您可以在其中根据每个对象的类查找某种克隆实现类
- 当对象可能形成有向无环图时,我通常会保留一个从原始到我见过的每个对象的克隆的 Map,并检查我是否已经制作了它
- 当你有一个通用图表时,问题会变得非常糟糕。您可能对对象创建顺序有奇怪的限制,当您有最终字段时甚至可能是不可能的。
现在,我建议以一种不太一般的方式重写你的问题
于 2012-10-24T12:34:58.727 回答
1
这并不容易,我们正在使用某种解决方法:
1)将地图转换为json字符串。(例如,使用 Google Gson)
2)将json字符串转换回map。
请注意存在性能问题,但这是一种最简单的方法。
于 2019-11-04T08:31:11.983 回答