java中HashMap的克隆实用程序
是否有java实用程序为java中HashMap的克隆实用程序,java,Java,是否有java实用程序为HashMap执行clone()方法,以便它不仅复制map对象(作为HashMap类中的clone())还复制map元素?元素中引用的其他对象如何?你希望你的克隆有多深 如果您的映射元素没有任何深度引用和/或所有内容都是可序列化的,则可以通过ObjectOutputStream将映射序列化为ByteArrayOutputStream,然后立即反序列化 唯一的替代方法是手动操作。一旦您知道您的键/值对元素是可克隆的: HashMap<Foo, Bar> map1
HashMap
执行clone()
方法,以便它不仅复制map对象(作为HashMap
类中的clone()
)还复制map元素?元素中引用的其他对象如何?你希望你的克隆有多深
如果您的映射元素没有任何深度引用和/或所有内容都是可序列化的,则可以通过ObjectOutputStream
将映射序列化为ByteArrayOutputStream
,然后立即反序列化
唯一的替代方法是手动操作。一旦您知道您的键/值对元素是可克隆的:
HashMap<Foo, Bar> map1 = populateHashmap();
HashMap<Foo, Bar> map2 = new HashMap<Foo, Bar>();
Set<Entry<Foo, Bar>> set1 = map1.entrySet();
for (Entry<Foo, Bar> e : l)
map2.put(e.getKey().clone(), e.getValue().clone());
HashMap map1=populateHashmap();
HashMap map2=新的HashMap();
Set set1=map1.entrySet();
对于(条目e:l)
map2.put(e.getKey().clone(),e.getValue().clone());
查看位于的deepClone方法。它不是泛型的,但它包含几个内置类型(递归地包括HashMap本身),并且显然可以扩展。深度克隆实用程序建议的SO问题与此类似,并且已经扩展
总之,他们建议使用谷歌代码。根据个人经验,它深度复制了
HashMap
s。它甚至可以克隆不可克隆的东西通常,复制应该是深入的。下面是一个如何“深度复制”的示例
Map
代码:
public静态映射deepCopyMapIntList
(地图原件){
Map copy=newhashmap(original.size());
for(int i:original.keySet()){
ArrayList list=original.get(i);
copy.put(i,(ArrayList)list.clone());
}
返回副本;
}
@Oso:如果e.getKey()或e.getValue()是另一个HashMap()或其他也需要深度复制克隆的对象,会发生什么情况呢。。。这是一个简单的hashmap克隆例程。我实际上假设这些对象是可克隆的,所以deepnes将由key/value对象本身来解决。为了在不假设可序列化/可克隆的情况下深度克隆hashmap,我认为反射是一种方法(仍然不确定是否为真)。附带说明:如果元素在对象图中是不可变的,则不需要克隆它们。
Map<Integer, ArrayList<Integer>>
public static Map<Integer, ArrayList<Integer>> deepCopyMapIntList
(Map<Integer, ArrayList<Integer>> original) {
Map<Integer, ArrayList<Integer>> copy = new HashMap<>(original.size());
for (int i : original.keySet()) {
ArrayList<Integer> list = original.get(i);
copy.put(i, (ArrayList<Integer>) list.clone());
}
return copy;
}