Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 复制HashMap,但有两个更改_Java_Hashmap_Processing - Fatal编程技术网

Java 复制HashMap,但有两个更改

Java 复制HashMap,但有两个更改,java,hashmap,processing,Java,Hashmap,Processing,我正在使用一个复制的HashMap,但是当我更改第二个HashMap的值时,第一个HashMap得到的值也会更改 这是我的代码: HashMap firstMap=newhashmap(); //用值填充第一个HashMap。 System.out.println(firstMap.get(“test”).height);//返回16 //然后,我复制HashMap: HashMap secondMap=新的HashMap(firstMap); secondMap.forEach((名称、图像)

我正在使用一个复制的HashMap,但是当我更改第二个HashMap的值时,第一个HashMap得到的值也会更改

这是我的代码:

HashMap firstMap=newhashmap();
//用值填充第一个HashMap。
System.out.println(firstMap.get(“test”).height);//返回16
//然后,我复制HashMap:
HashMap secondMap=新的HashMap(firstMap);
secondMap.forEach((名称、图像)->{
图像。调整大小(1,1);
//这将图像的高度和宽度设置为1
//但是,从逻辑上讲,它必须只更改SECONDMap中的值,而不是FIRSTMap中的值
});
System.out.println(firstMap.get(“test”).height);//返回1
//它返回1,但我没有更改第一个映射的值??
所以我不明白发生了什么以及如何修复它?

你所做的是所谓的浅层复制,它制作一个新的哈希映射,指向第一个哈希映射的键和值,这就是为什么当一个被更改时,另一个会感觉到更改

您需要做的是一个深度复制,可以通过迭代第一个哈希映射并逐个处理所有数据来完成

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());
}
HashMap secondMap=newhashmap();
for(Map.Entry:firstMap.entrySet())
{
secondMap.put(entry.getKey(),entry.getValue());
}

复制地图不会复制地图中存储的内容:只需将相同的实例放入不同的地图实例中即可。换言之:你已经做了一个浅拷贝。你想做深拷贝而不是浅拷贝吗?如果我可以问的话,你在写什么样的代码?这是一个将处理作为“另一个库”使用的Java程序吗?因为如果是这样的话,这不是一个处理问题,而是一个关于深度复制Java数据结构的普通问题哼,一个ArrayList有两个参数类型?@Ayfri抱歉修正了,我没有仔细看就复制了剪下来的。