Map拷贝 关于对象深拷贝 浅拷贝的问题

简介:

map

上面程序的期望输出值是,
mapFrist的值均为1,
但是实际上输出结果为:
{key1=1}
{key2=2, key1=1}

这里是因为map发生了浅拷贝,mapFirst只是复制了map的引用,和map仍使用同一个内存区域,所以,在修改map的时候,mapFirst的值同样会发生变化。
浅复制:则是只复制对象的引用,两个引用仍然指向同一个对象,在内存中占用同一块内存。被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
深复制:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。

如何解决?
使用深拷贝,拷贝整个对象,而非引用
Map中有个方法叫做putAll方法,可以实现深拷贝,如下

map.putAll()

如上,输出结果为:
{key1=1}
{key1=1}

目录
相关文章
|
4月前
|
存储 人工智能 前端开发
深拷贝浅拷贝的区别?如何实现一个深拷贝?
深拷贝浅拷贝的区别?如何实现一个深拷贝?
|
7天前
|
Java
对引用拷贝,浅拷贝,深拷贝的理解
对引用拷贝,浅拷贝,深拷贝的理解
12 0
|
6月前
深拷贝对象数组
深拷贝对象数组
16 0
|
9月前
|
JSON 数据格式
深拷贝和浅拷贝、及实现方式
深拷贝和浅拷贝、及实现方式
67 0
|
JavaScript 前端开发
数组和对象的浅拷贝,深拷贝
数组和对象的浅拷贝,深拷贝
数组和对象的浅拷贝,深拷贝
|
JSON 数据格式
2、对象拷贝(浅拷贝、深拷贝)、深拷贝的两种方法(递归、转JSON)
2、对象拷贝(浅拷贝、深拷贝)、深拷贝的两种方法(递归、转JSON)
101 0
面试题:深拷贝、浅拷贝、引用拷贝的区别
面试题:深拷贝、浅拷贝、引用拷贝的区别
163 0
面试题:深拷贝、浅拷贝、引用拷贝的区别
|
算法 Java
深拷贝一个对象会了,怎么深拷贝一个图?
在前面,我写过一篇Java的深浅拷贝,那是基于对象的拷贝,但放眼数据结构与算法中,你有考虑过怎么拷贝一个图吗?(无向图)
165 0
深拷贝一个对象会了,怎么深拷贝一个图?