复制一个 HashMap 但有两个变化

Duplicating a HashMap but having changes from twos

我正在使用复制的 HashMap,但是当我更改第二个 HashMap 的值时,第一个 HahsMap 的值也会发生变化。

这是我的代码:

HashMap<String, processing.core.PImage> firstMap = new HashMap<>();
// Filling the first HashMap with values.
System.out.println(firstMap.get("test").height); // returning 16

// Then, I duplicate the HashMap :
HashMap<String, processing.core.PImage> secondMap = new HashMap<>(firstMap);

secondMap.forEach((name, image) -> {
  image.resize(1, 1); 
  // This sets height and width of images as 1
  // BUT, logically, it must change only values from SECONDMap, not FIRSTMap
});

System.out.println(firstMap.get("test").height); // returning 1
// It returns 1 but I didn't change the values from the FIRST map ??

所以我只是不明白发生了什么以及如何解决它?

你所做的叫做Shallow Copy,它正在创建一个新的 Hash Map 指向第一个 Hash Map 的键和值,这就是为什么当一个改变了其他人感受到了变化。

你需要做的是Deep Copy,可以通过遍历第一个Hash Map,将所有的数据一个一个copy出来

HashMap<String, processing.core.PImage> secondMap = new HashMap<String, processing.core.PImage>();
for (Map.Entry<String, processing.core.PImage> entry : firstMap.entrySet())
{
    secondMap.put(entry.getKey(), entry.getValue());
}