java克隆一个包含嵌套映射的映射

标签 java

我有这个代码:

Map<String, Map<String,String>> map = new HashMap<String, Map<String,String>> ();

我想克隆这张 map ,我喜欢这样:

Map<String, Map<String, String>> newMap =  (Map<String, Map<String, String>>) ((HashMap<String, Map<String,String>>) map).clone();

然后:

System.out.println(map.get("myKey1").get("myKey2"));
newMap.get("myKey1").put("myKey2","testValue"); 
System.out.println(map.get("myKey1").get("myKey2"));
System.out.println(newMap.get("myKey1").get("myKey2"));

我得到这个输出:

map.get("myKey1").get("myKey2"):OldValue

map.get("myKey1").get("myKey2"): testValue

newMap.get("myKey1").get("myKey2"): testValue

获取map.get("myKey1").get("myKey2") = testValue时很奇怪!

最佳答案

https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html#clone()

Returns a shallow copy of this HashMap instance: the keys and values themselves are not cloned.

答案:您必须遍历要复制和克隆单个元素的任何类型的集合。

建议:如果您想创建某种自动化,请考虑使用序列化,Java 本身不支持对象克隆。

http://www.avajava.com/tutorials/lessons/how-do-i-perform-a-deep-clone-using-serializable.html

这种类型的复制称为深度克隆。

关于java克隆一个包含嵌套映射的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37593627/

相关文章:

java - jndi.properties 的所有属性名称是什么?

java - PostgreSQL pg_stat_activity 被 "SET extra_float_digits = 3"查询填满,导致调用 Driver#connect 时出错

java - 如何将库文件夹添加到 Eclipse?

Java - 在 Jboss 中调度任务且无需 EJB

java - 哪些客户端缓存选项适用于 Cassandra 和 Java?

java - JSONException 字符串无法转换为 JSONArray

java - BerkeleyDB数据库文件打开(java)

java - Android:如何用多行长的项目拆分一个很长的字符串?

java - android中的三角形opengl

java - 使 ArrayList<JTextArea> 为 JScrollPane