关于Java中的List<User>如何进行深拷贝

ops/2024/10/22 11:13:04/

联调中发现了一个很初级,但有容易被忽略的拷贝问题:

错误方式:List<User> us = new ArrayList<>(); // name = "张三"List<User> us1 = new ArrayList<>(us);for (User u : us) {...u.setName("douzi")
}for (User u : us1) {...
}System.out.print(us1); // 姓名修改成douzi了

此种拷贝,如果修改了集合us中的User对象,us1会跟着改变;

找了网上很多方式:

1.clone方式

us的方法里边不存在clone;

2.addAll方法

不是深度拷贝,修改了集合us中的User对象,us1会跟着改变

3.us.stream().collect(Collectors.toList())

不是深度拷贝,修改了集合us中的User对象,us1会跟着改变

4.CollectionUtil.copy(us)

不是深度拷贝,修改了集合us中的User对象,us1会跟着改变;

解决方案:

1.原生写法

List<User> us = new ArrayList<>();List<User> us1 = new ArrayList<>(us.size());
for (int i = 0; i < us.size(); i++) {User u = us.get(i);User tmp = new User();BeanUtil.copyProperties(u, tmp, false);us1.add(tmp);
}

2.hutool工具

List<User> us = new ArrayList<>();List<User> us1 = CglibUtil.copyList(us, User::new);

总结

有时候老鸟也会晕呀!


http://www.ppmy.cn/ops/118965.html

相关文章

LeetCode讲解篇之53. 最大子数组和

文章目录 题目描述题解思路题解代码 题目描述 题解思路 该问题我们可以转换为求以i为最后一个元素的0 ~ i范围内的最大子数组和&#xff0c;然后其中的所有的最大子数组和的最大值就是我们要返回的答案 题解代码 func maxSubArray(nums []int) int {ans : nums[0]for i : 1;…

JMeter与大模型融合应用之JMeter日志自动检测错误并机器人发送钉钉信息

JMeter与大模型融合应用之JMeter日志自动检测错误并机器人发送钉钉信息 业务框架 我们需要实现的基本业务框架如下 需求描述 我们目前要在JMeter上实现如下功能: 特性1:定时任务自动轮巡检测jmeter.log日志中错在ERROR的报错信息 特性2:针对ERROR报错信息自动进行捕获,…

使用python进行自然语言处理的示例

程序功能 分词&#xff1a;将输入句子拆分为单词。 词性标注&#xff1a;为每个单词标注其词性。 命名实体识别&#xff1a;识别命名实体&#xff08;如人名、地名、组织等&#xff09;。 这段代码展示了如何用 nltk 进行基础的 NLP 任务&#xff0c;包括分词、词性标注和命名…

DialMAT:跨模态特征提取与对抗训练的结合

目录 一、背景介绍二、技术路线2.1 DialMAT的总体架构2.2 基于矩的对抗训练&#xff08;MAT&#xff09;2.3 跨模态并行特征提取参考文献 一、背景介绍 在智能体研究领域&#xff0c;一个重要的挑战是如何让智能体有效理解人类的语言指令并在实际环境中完成任务。尤其是在复杂环…

leetcode刷题day27|贪心算法Part01(455.分发饼干、376. 摆动序列、53. 最大子序和)

前言&#xff1a; 贪心的本质选择每一阶段的局部最优&#xff0c;从而达到全局最优。 455.分发饼干 思路&#xff1a;局部最优-大饼干喂给胃口大的&#xff0c;充分利用饼干尺寸喂饱一个&#xff1b;全局最优&#xff1a;喂饱尽可能多的小孩。可以尝试使用贪心策略&#xff0…

图解C#高级教程(一):委托

什么是委托 可以认为委托是持有一个或多个方法的对象。但它与对象不同&#xff0c;因为委托可以被执行。当执行委托时&#xff0c;委托会执行它所“持有”的方法。先看一个完整的使用示例。 // See https://aka.ms/new-console-template for more informationdelegate void M…

Python与SQL Server数据库结合导出Excel并做部分修改

Python与SQL Server数据库结合导出Excel并做部分修改 需求&#xff1a;在数据库中提取需要的字段内容&#xff1b;并根据字段内容来提取与拆分数据做为新的列最后导出到Excel文件 # -*- coding: utf-8 -*- import pandas as pd import re import pymssql import timestart_ti…

GAMES101(作业8)

作业8 题目&#xff1a; 模拟绳子动画&#xff0c;包括基于物理的&#xff0c;和非物理的&#xff0c;应该修改的函数是:rope.cpp 中的void Rope::simulateEuler(... Rope::rope(...)&#xff0c;&#xff0c;void Rope::simulateVerlet(...) 代码框架&#xff1a; main:负…