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

list复制出新的list后修改元素,也更改了旧的list?

例子

addAll()

    @Testpublic void CopyListTest(){Student student = Student.builder().id(1).name("张三").age(23).classId(1).build();Student student2 = Student.builder().id(2).name("李四").age(22).classId(1).build();List<Student> students = new ArrayList<>();students.add(student);students.add(student2);System.out.println("旧的list");for (Student stu : students){System.out.println(stu);}List<Student> list2 = new ArrayList<>();list2.addAll(students);list2.stream().forEach(t->t.setClassId(2));System.out.println("新的list");for (Student stu : list2){System.out.println("班级id"+stu.getClassId());}System.out.println("旧的list");for (Student stu : students){System.out.println("班级id"+stu.getClassId());}}

旧的list的值被改变

直接用 newList = oldList 是引用传递,复制的是地址
改变oldList里的内容同样也会影响到newList

newList.addAll(oldList)是值传递

参考:http://t.csdnimg.cn/EGcYC

但 用allAll() 原来的值也被改变了

解决

使用深度复制

  public static <T> List<T> deepCopy(List<T> sourceList) throws IOException, ClassNotFoundException{ByteArrayOutputStream bo= new ByteArrayOutputStream();ObjectOutputStream oos= new ObjectOutputStream(bo);oos.writeObject(sourceList);ByteArrayInputStream bi= new ByteArrayInputStream(bo.toByteArray());ObjectInputStream ois=new ObjectInputStream(bi);@SuppressWarnings("unchecked")List<T> dest = (List<T>)ois.readObject();return dest;}

所复制的元素如果是对象,需要实现序列化。

参考:http://t.csdnimg.cn/EGcYC

如果所复制的元素是字符

    List<String> newList=new ArrayList<String>(oldList);

http://www.lryc.cn/news/229736.html

相关文章:

  • Qt绘制各种图形
  • NIO 笔记(二)Netty框架专题
  • HTTP——
  • 第13章 Java IO流处理(二) 字节流与字符流
  • 【论文阅读】(CTGAN)Modeling Tabular data using Conditional GAN
  • 如何进行iOS技术博客的备案?
  • RTSP/Onvif安防平台EasyNVR批量禁用/启用通道接口的详细操作步骤
  • 2个器件,做1个恒流源
  • SQL INSERT INTO SELECT 语句
  • Elasticsearch 在 Java 开发中的应用
  • linux 的uart驱动框架分析
  • 头歌答案HTML——基础
  • 【数据结构——队列的实现(单链表)】
  • 《LeetCode力扣练习》代码随想录——链表(移除链表元素---Java)
  • linux 安装 mini conda,linux下安装 Miniconda
  • 机器人 Null impedance(零阻抗)梳理
  • MDM9205开发环境搭建与编译调试
  • Linux操作系统使用及C高级编程-D3Linux shell命令(权限、输入输出)
  • 无线充,大功率小家电,智能家居,无人机快速充电等产品供电 LDR6328S芯片TYUPE-C PD诱骗电压 USB-C解决PD电源取电问题
  • 2023数字科技生态大会-数字安全论坛 学习笔记
  • 玩转ChatGPT:ARIMA模型定制GPT-1.0
  • CSDN每日一题学习训练——Java版(字符串相乘、子集、删除链表的倒数第 N 个结点)
  • PostgreSQL 判断JSONB数组是否包含特定的元素
  • idea中搭建Spring boot项目(借助Spring Initializer)
  • acwing算法基础之搜索与图论--染色法判断二分图
  • 塔式服务器是什么服务器?
  • nodejs+express接口全局拦截和环境变量设置
  • 深度学习之基于YoloV5的目标检测和双目测距系统
  • 如何显示标注的纯黑mask图
  • 【算法每日一练]-图论(保姆级教程 篇1(模板篇)) #floyed算法 #dijkstra算法 #spfa算法