这是深度克隆此数据结构示例的最佳方式:Map<String, List<Object>>
?
Map<String, List<Object>> mapB = new LinkedHashMap<String, List<Object>>();
for(String key: mapA.keySet()){
mapB.put(key, new ArrayList<Object>());
mapB.get(key).addAll(mapA.get(key));
}
感谢您的时间。
答案 0 :(得分:1)
如果您不想要打印对象的深层副本,那就没问题了。
答案 1 :(得分:1)
深度克隆的另一种方法是使用序列化。以下方法显示了如何完成此操作:
public Object deepClone(Object obj) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
return ois.readObject();
} catch (IOException e) {
return null;
} catch (ClassNotFoundException e) {
return null;
}
}
apache commons lang SerializationUtils提供了一种通用方法来执行此操作。
两种方式都假设对象图中的所有对象都实现了可序列化。
答案 2 :(得分:1)
这是深度克隆此数据结构的最佳方式
或多或少,是的。您可以使用将源Collection作为参数的ArrayList构造函数使其更短一些,并且通过迭代键值对而不是再次查找每个键来更高效(但更加冗长),但它相同的事情
Map<String, List<Object>> mapB = new LinkedHashMap<>();
for (Map.Entry<String, List<Object>> entry : mapA.entrySet()) {
mapB.put(entry.getKey(), new ArrayList<>(entry.getValue()));
}