Java HashMap-深度复制
我只是想找出最好的解决方案,如何制作Java HashMap-深度复制,java,hashmap,deep-copy,Java,Hashmap,Deep Copy,我只是想找出最好的解决方案,如何制作HashMap的深度副本。此映射中没有实现可克隆的对象。我想找到比序列化和反序列化更好的解决方案。我认为它不能以通用的方式实现 如果你有机会简单地实现克隆,我会这么做 更复杂的一点是创建一个类型映射,在这里可以根据每个对象的类查找某种克隆实现类 当对象可能形成一个有向无环图时,我通常会保留一张从我见过的每个对象的原始到克隆的地图,并检查我是否已经绘制了它 当你有一个普通的图表时,问题会变得非常严重。您可能对对象创建顺序有奇怪的约束,甚至在您有最终字段时可能不
HashMap
的深度副本。此映射中没有实现可克隆的对象。我想找到比序列化和反序列化更好的解决方案。我认为它不能以通用的方式实现
- 如果你有机会简单地实现克隆,我会这么做李>
- 更复杂的一点是创建一个类型映射,在这里可以根据每个对象的类查找某种克隆实现类
- 当对象可能形成一个有向无环图时,我通常会保留一张从我见过的每个对象的原始到克隆的地图,并检查我是否已经绘制了它
- 当你有一个普通的图表时,问题会变得非常严重。您可能对对象创建顺序有奇怪的约束,甚至在您有最终字段时可能不可能
Cloner cloner = new Cloner();
MyClass clone = cloner.deepClone(o);
// clone is a deep-clone of o
但是要注意:这可能会克隆数千个对象(如果克隆的对象有那么多引用)。此外,复制文件或流可能会使JVM崩溃
但是,您可以忽略类的某些实例,如streams等。值得检查此库及其源代码。这并不容易,我们正在使用某种解决方法: 1) 将映射转换为json字符串。(例如,使用Google Gson) 2) 将json字符串转换回映射
请注意,存在性能问题,但这是一种最简单的方法。所以这更像是一个如何克隆不可克隆对象的问题?HashMap似乎是一个小细节,可以通过简单的递归来解决。它们是谁的对象类?如果是自己的,只需添加可克隆。尝试克隆不可克隆的对象是一种明确的代码味道。这将是一个考虑重构的好时机。@ SMOLDA-如果你不知道对象是什么,那么这个气味:你不能保证你能够克隆:对象持有的是什么“代码>瞬态<代码>属性,或者是<代码>流<代码>,等等…有些东西是专门设计的,所以你不能得到超过一个。不能复制任意对象。找到另一种方法。它会深度复制一个对象及其所有嵌套成员吗?假设Object1有Object2,Object2有一个映射。当我执行
cloner.deepClone(Object1)时代码>,它会深度复制所有内容吗?@zengr是的,它会复制所有内容。