我有一个看起来像这样的用例:
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);
这是我得到的输出:
{xy=xy}
{xy=xy}
但我期待'pr'保持为:
{ab=ab, xy=xy}
看起来prNew接受了pr的引用,对prNew的任何修改都会修改pr。
那我怎么解决这个问题呢?在我的用例中,我需要复制pr并进行一些更改,但不应影响原始pr。
非常感谢任何帮助。感谢。
答案 0 :(得分:2)
您在内存中创建以下内容:
因此,当您更改1张地图时,您可以同时更改这两张地图,因为它们是相同的地图。
如果你想改变1,同时保持另一个相同,你需要制作地图的副本。
您可以使用带有地图的构造函数来执行此操作。
答案 1 :(得分:1)
目前pr
和prNew
引用相同的对象,pr
或prNew
上的修改相同,它们只是同一个地图的别名
创建prNew
时必须使用the constructor that takes another Map制作副本,所有映射都将复制到新的映射中
//...
Map<String, String> prNew = new HashMap<>(pr); // <--
prNew.remove("ab");
System.out.println(pr); // {ab=ab, xy=xy}
System.out.println(prNew); // {xy=xy}