Java HashMap-深层复制

问题描述 投票:15回答:3

我只是试图找到最佳的解决方案,如何制作HashMap的深层副本。此映射中没有实现Cloneable的对象。我想找到比序列化和反序列化更好的解决方案。

java hashmap deep-copy
3个回答
13
投票

看一下深度克隆,在Google Code上您可以找到一个库。您可以在https://github.com/kostaskougios/cloning上阅读它。

如何运作很容易。这可以克隆任何对象,并且该对象不必实现任何接口,例如可序列化。

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

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

但是,您可以忽略类的某些实例,例如stream等。值得检查此库及其来源。


3
投票

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

  • [如果您有机会简单地实现克隆,那我就走了。
  • 更复杂的是创建类型映射,在其中您将根据每个对象的类查找某种克隆实现类
  • [当这些对象可能形成有向无环图时,我通常将Map从原始对象复制到我见过的每个对象的副本,并检查是否已经完成]
  • [当您拥有一般图形时,问题就变得非常棘手。您可能对对象创建顺序有一些奇怪的约束,当您拥有最终字段时,甚至可能无法实现。

目前,我建议以一种不太笼统的方式重写您的问题


0
投票

这不容易,我们正在使用某种解决方法:

1)将地图转换为json字符串。 (例如,使用Google Gson)

2)将json字符串转换回map。

请注意,存在性能问题,但这是最简单的方法。

© www.soinside.com 2019 - 2024. All rights reserved.