目录
- 1 将Map深拷贝到另一个Map对象当中
- 2 浅拷贝Map
1 将Map深拷贝到另一个Map对象当中
今天赋值的时候遇到的小坑
相关文章推荐:
Java克隆方式避免频繁创建对象优化方案 https://blog.csdn.net/ZGL_cyy/article/details/126556907
1.需求说明
将一个MapA对象中所有的键值对完全拷贝到另一个MapB对象中;
另一个MapB对象中原来的键值保持不变(不受影响);
拷贝成功后MapB对象当中的内容将不再随着MapA中内容的变化而变化。
2.代码实现
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* 复制map对象
* @explain 将paramsMap中的键值对全部拷贝到resultMap中;
* paramsMap中的内容不会影响到resultMap(深拷贝)
* @param paramsMap
* 被拷贝对象
* @param resultMap
* 拷贝后的对象
*/
public static void mapCopy(Map paramsMap, Map resultMap) {
if (resultMap == null) resultMap = new HashMap();
if (paramsMap == null) return;
Iterator it = paramsMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
Object key = entry.getKey();
resultMap.put(key, paramsMap.get(key) != null ? paramsMap.get(key) : "");
}
}
3.测试
public class TestDemo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>(1);
map.put("name", "oldlu");
Map<String, Object> map2 = new HashMap<String, Object>(1);
map2.put("age", 28);
// 测试一:是否实现拷贝
mapCopy(map2, map);
System.out.println(map);
System.out.println(map2);
// 测试二:拷贝后的map对象是否受原map对象的影响
map2.clear();
System.out.println(map);
System.out.println(map2);
}
}
结果如图
同理resultMap.putAll也是深拷贝
2 浅拷贝Map
1 测试代码
public class TestDemo {
public static void main(String[] args) {
// 赋值操作:=只能实现浅拷贝,map中的内容发生变化,copyMap中的内容亦同步发生变化
Map<String, String> map = new HashMap<String, String>(1);
map.put("name", "oldlu");
Map<String, String> copyMap = new HashMap<String, String>(1);
// 实现浅拷贝的方式:使用=
copyMap = map;
map.remove("name");
System.out.println("map:" + map);
System.out.print("copyMap:" + copyMap);
}
}
测试结果