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

问题代码:

java 复制代码
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));
    }

打印:

java 复制代码
l1:[{"a":1}]
l2:[]
l1:[{"a":1,"b":1}]
l2:[{"a":1,"b":1}]

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

修改代码:

java 复制代码
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));
    }

打印:

java 复制代码
l1:[{"a":1}]
l2:[]
l1:[{"a":1}]
l2:[{"a":1,"b":1}]

完美

相关推荐
Wang's Blog12 小时前
Java框架快速入门: Spring Security+OAuth2之数据库和实体类的RBAC改造
java·数据库·spring
讳疾忌医丶12 小时前
深度拆解 RocksDB 内核:基于 C++17 的 FIFO 调度状态机与温度阶梯自愈设计
java·c++·算法·架构
郑州光合科技余经理13 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
毅炼13 小时前
Rover-Suite 开源发布:轻量服务注册中心与网关一体化方案
java·后端·系统架构·gateway
梦想平凡13 小时前
百游棋牌源代码开发搭建教程(十):隔离部署、备份恢复与双端验收
java·前端·javascript·数据库·源代码管理
sunshine22 girl14 小时前
Idea中如何搜索
java·ide·intellij-idea
猫吻鱼15 小时前
【AI 01】【Spring AI 基础使用】
java·spring·spring ai
梨涡泥窝15 小时前
基于SSM的校园二手交易平台的设计与实现
java·tomcat
许彰午15 小时前
44-useRowSet镜像实现
java·低代码·架构
bamboolm16 小时前
springboot+Ollama整合
java·ollama