记一个坑-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}]

完美

相关推荐
升鲜宝供应链及收银系统源代码服务12 分钟前
《IntelliJ + Claude Code + Gemini + ChatGPT 实战配置手册升鲜宝》
java·前端·数据库·chatgpt·供应链系统·生鲜配送
daidaidaiyu24 分钟前
Nacos实例一则及其源码环境搭建
java·spring
小江的记录本35 分钟前
【Redis】Redis全方位知识体系(附《Redis常用命令速查表(完整版)》)
java·数据库·redis·后端·python·spring·缓存
摇滚侠1 小时前
Java 项目《谷粒商城-1》架构师级Java 项目实战,对标阿里 P6-P7,全网最强,实操版本
java·开发语言
zihao_tom1 小时前
Spring Boot(快速上手)
java·spring boot·后端
hua872222 小时前
SpringSecurity之跨域
java
小王不爱笑1322 小时前
G1 GC 的核心基础:Region 模型的补充细节
java·jvm·算法
salipopl2 小时前
Spring 中的 @ExceptionHandler 注解详解与应用
java·后端·spring
LJianK12 小时前
java封装
java·前端·数据库
海海不瞌睡(捏捏王子)3 小时前
C#知识点概要
java·开发语言·1024程序员节