当前位置: 首页 > news >正文

记一个坑-list.addAll()后,修改新list的内容,旧list也会跟着改

问题代码:

public static void main(String[] args) throws Exception{Map<String,Object> map = new HashMap<>();map.put("a",1);List<Map<String,Object>> l1 = new ArrayList<>();l1.add(map);List<Map<String,Object>> l2 = new ArrayList<>();System.err.println("l1:" + new Gson().toJson(l1));System.err.println("l2:" + new Gson().toJson(l2));l2.addAll(l1);for (Map<String, Object> mapUtil : l2) {mapUtil.put("b",1);}System.err.println("l1:" + new Gson().toJson(l1));System.err.println("l2:" + new Gson().toJson(l2));}

打印:

l1:[{"a":1}]
l2:[]
l1:[{"a":1,"b":1}]
l2:[{"a":1,"b":1}]

可以看到我明显改的是l2,l1怎么也变了呢,原因就在 addAll()
修改代码:

public static void main(String[] args) throws Exception{Map<String,Object> map = new HashMap<>();map.put("a",1);List<Map<String,Object>> l1 = new ArrayList<>();l1.add(map);List<Map<String,Object>> l2 = new ArrayList<>();System.err.println("l1:" + new Gson().toJson(l1));System.err.println("l2:" + new Gson().toJson(l2));l2 =(List<Map<String,Object>>) SerializationUtils.clone((Serializable) l1);for (Map<String, Object> mapUtil : l2) {mapUtil.put("b",1);}System.err.println("l1:" + new Gson().toJson(l1));System.err.println("l2:" + new Gson().toJson(l2));}

打印:

l1:[{"a":1}]
l2:[]
l1:[{"a":1}]
l2:[{"a":1,"b":1}]

完美


http://www.mrgr.cn/news/10003.html

相关文章:

  • 机器学习-32-机器学习的进阶路径
  • 树莓派5安装系统并配置SSH与VNC权限实现Windows设备远程连接
  • 为什么互联网上要设立防火墙?WAF又是什么?
  • 系统架构设计师 - 软件工程(3)
  • 关闭spirng boot集成springdoc-openapi的接口文档
  • PHP 7.4.21 development server 源码泄露漏洞复现
  • python中selenium自动化爬取
  • Python测试框架之—— pytest介绍与示例
  • Vue3通信方式 插槽
  • ssrf简介
  • linux qt编写串口软件
  • 鸿蒙卡片服务开发
  • 实现简易 React SSR 框架
  • CSS详知识点——CSS变形
  • 超分 Real-ESRGAN 使用笔记
  • react调用子组件方法`TS2304: Cannot find name ‘Ref‘`
  • 深入探索JavaScript按位或运算:原理、用途与注意事项全解析
  • 基于java的美食信息推荐系统的设计与实现论文
  • jmeter简单发送接口
  • Android - 自定义view