在java中将地图分配给新地图,然后更改新地图也会更改原始地图
我有一个用例,看起来像这样:在java中将地图分配给新地图,然后更改新地图也会更改原始地图,java,collections,Java,Collections,我有一个用例,看起来像这样: Map<String,String> pr = new HashMap<>(); pr.put("ab","ab"); pr.put("xy","xy"); Map<String,String> prNew = new HashMap<>(); prNew = pr; prNew.remove("ab"); System.out.println(pr);
Map<String,String> pr = new HashMap<>();
pr.put("ab","ab");
pr.put("xy","xy");
Map<String,String> prNew = new HashMap<>();
prNew = pr;
prNew.remove("ab");
System.out.println(pr);
System.out.println(prNew);
但我希望“公共关系”保持为:
{ab=ab, xy=xy}
看起来prNew引用了pr,对prNew的任何修改也会修改pr
那我该怎么解决这个问题呢?在我的用例中,我需要复制一份pr并进行一些更改,但它不应影响原始pr
任何帮助都将不胜感激。谢谢。- 目前,
和pr
引用了相同的对象,对prNew
或pr
的修改是相同的,它们只是同一地图的别名prNew
- 当您创建
时,您必须使用,以便复制,所有映射都将复制到新映射中prNew
/。。。
Map prNew=新HashMap(pr);//为什么代码不起作用
您可以在内存中创建以下内容:
因此,当您更改一个贴图时,您将同时更改这两个贴图,因为它们是同一个贴图
解决方案
如果要更改1,同时保持另一个不变,则需要复制地图
您可以使用接受映射的构造函数来执行此操作。您希望复制映射,而不仅仅是分配它。HashMap已经有一个可以使用的复制构造函数:prNew=newHashMap(pr)代码>它不是“看起来像”==>它是!请阅读以下内容以供参考:。也:
{ab=ab, xy=xy}
//...
Map<String, String> prNew = new HashMap<>(pr); // <--
prNew.remove("ab");
System.out.println(pr); // {ab=ab, xy=xy}
System.out.println(prNew); // {xy=xy}