list的addAll方法是浅拷贝

List集合的复制方式 如果要进行深拷贝(deep copy),即创建一个完全独立的新List,其中的元素是原始对象的副本而不是引用,那么需要自行实现深拷贝的逻辑。因此,在多线程环境下进行List集合复制时,需要确保对原始List集合的访问是线程安全的,例如使用线程安全的集合类或者添加适当的同步机制。以上两种复制方式都是浅拷贝(shallow copy),即如果List集合中存储的是对象引用,那么复制后的新List中的元素仍然是原始对象的引用,而不是对象的副本。因此,如果修改了原始对象,这些修改也会反映到复制后的List中。 阅读详情
package com.wp.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class ListCopyTest {

    /**
     * list1的数据addAll到list2, 位置还是一样的吗
     * 位置一样,对象也是一样的
     * 结论:
     * list的addAll方法,是浅拷贝,拷贝后,对新的list中数据更改,对原来的list中对象有影响。
     * 但是若是list中保存的是基本类型的数据,拷贝前后的数据就没有联系了。即对新的list更改,不会影响原来的list。
     * @param args
     */
    public static void main(String[] args) {
        List<FileInfo> list1 = new ArrayList<FileInfo>();
        list1.add(new FileInfo("fff", false));
        list1.add(new FileInfo("bbb", true));
        FileInfo fileInfo3 = new FileInfo("ddd", false);
        list1.add(fileInfo3);
        list1.add(new FileInfo("ccc", true));
        list1.add(new FileInfo("eee", false));
        list1.add(new FileInfo("aaa", true));

        System.out.println("-----------list1内容-----------");
        for (FileInfo fileInfo : list1) {
            System.out.print(fileInfo.getFilename()+" ");//fff bbb ddd ccc eee aaa
        }
        System.out.println();
        System.out.println("----------------------");
        List<FileInfo> list2 = new ArrayList<FileInfo>();
        list2.addAll(list1);
        
        
        list1.get(0).setFilename("123423q4");//list1中对象属性发生变化,list2中对应的对象属性也会发生变化
        list1.add(0,new FileInfo("111111111", true));//list1中增加或删除对象,list2中对象不会发生变化
        list1.remove(2);//删除ddd
        System.out.println();
        System.out.println("-----------list1内容改变后-----------");
        for (FileInfo fileInfo : list1) {
            System.out.print(fileInfo.getFilename()+" ");//123423q4 bbb ddd ccc eee aaa
        }

        Collections.sort(list1, new Comparator<FileInfo>() {

            @Override
            public int compare(FileInfo o1, FileInfo o2) {
                return o1.getFilename().compareTo(o2.getFilename());
            }
        });
        System.out.println();
        System.out.println("-----------list1排序后-----------");
        for (FileInfo fileInfo : list1) {
            System.out.print(fileInfo.getFilename()+" ");//123423q4 bbb ddd ccc eee aaa
        }//list1排序,对list2没有影响

        System.out.println();
        System.out.println("-----------list2内容-----------");
        for (FileInfo fileInfo : list2) {
            System.out.print(fileInfo.getFilename()+" ");//123423q4 bbb ddd ccc eee aaa
        }
        ///////////////////
        
        
        System.out.println();
        System.out.println("==============================");

        List<String> list3 = new ArrayList<String>();
        String one = "6666";
        list3.add(one);
        list3.add("3333");
        list3.add("4444");
        list3.add("2222");
        list3.add("5555");
        list3.add("1111");
        System.out.println();
        System.out.println("----------list3内容------------");
        for (String string : list3) {
            System.out.print(string+ " ");//6666 3333 4444 2222 5555 1111
        }
        List<String> list4 = new ArrayList<String>();
        list4.addAll(list3);
        
        list3.add(0,"0000");
        one = "test";//若list3保存的是string等基本类型的值,修改成员的值,对新的list4没有影响,即list4中的值不变。

        System.out.println();
        System.out.println("------------list3增加成员后----------");
        for (String string : list3) {
            System.out.print(string+ " ");//0000 6666 3333 4444 2222 5555 1111
        }
        System.out.println();
        System.out.println("------------list4内容----------");
        for (String string : list4) {
            System.out.print(string+ " ");//6666 3333 4444 2222 5555 1111
        }
        
        
    }
}

语义通信高斯信道仿真代码 【代码】语义通信高斯信道仿真代码。 阅读详情

相关推荐

从零到一:使用阿里云百炼搭建企业级 AI Agent 完全实战手册(2026超详细版)

本文是一份企业级AI Agent构建手册,主要面向企业技术负责人、AI产品经理和后端开发工程师。手册详细介绍了如何在阿里云百炼平台上搭建企业智能体应用的全流程,包括环境准备、知识库构建、智能体创建、工具集成、工作流编排等核心环节。重点内容包括: 准备工作:阿里云账号注册、百炼服务开通、免费额度领取、API Key管理 知识库构建:文档格式要求、内容优化原则、RAG系统搭建 智能体开发:Agent创建、工具集成、复杂业务工作流设计 生产部署:多渠道接入、监控运维、安全治理 成本控制:Token预算管理、选型决

u010323587的专栏 1072

Java List.addAll()方法:添加所有元素到列表中

Java List.addAll()方法:添加所有元素到列表中 Java 集合类的 List.addAll() 方法用于将指定 collection 中的所有元素添加到列表。 语法1 用于将指定 collection 中的所有元素添加到列表的尾部。如果 List 集合对象由于调用 addAll 方法而发生更改,则返回 true。 addAll(Collection<?extends E>c) 参数说明: c:用于指定要将全部元素添加到列表中的 collection。 示例 本示例使

youif的博客 2万+

lumerical中DEVICE和MODE模块的交互使用(真的很干货!!可以自信的说网上绝对找不到比我更详细的步骤了)

几个脚本文件很重要! Lumerical仿真流程: 一、DEVICE: (1).建模并且运行完之后,在脚本提示符下键入以下脚本行以运行plotDopingProfile.lsf如图1(文件名如果索引不到的话就可以把文件直接用notepad++打开,然后把代码直接输入到device中script脚本中 如图2)脚本文件并生成下图 如图3: (图2) (图1) (图3) (2).仿真...

1万+

【JAVA】List.addAll 详解

本篇文章介绍了方法的基本语法、返回值、使用方法及注意事项。通过本文的介绍,相信大家已经对于该方法的使用有了一定的了解和掌握。

代码的魅力,根本走不出来 1万+

ENVI基于Landsat影像构建郑州市2000-2019年遥感生态指数RSEI

本文基于landsat5、landsat7、landsat8三种传感器的影像,使用ENVI软件构建郑州市2000-2019年遥感生态指数RSEI。内含ENVI详细操作、使用的公式以及构建结果。

Lexicopperfield的博客 1万+

手机也能跑!5.6MB的AnimeGANv3模型部署实战:从PyTorch到ONNX再到移动端推理

本文详细介绍了如何将轻量级动画生成器AnimeGANv3从PyTorch模型转换为ONNX格式,并部署到移动端进行实时推理。通过5.6MB的极简模型设计和优化策略,实现在手机等边缘设备上的高效动漫风格转换,涵盖模型准备、格式转换、移动端优化及性能调优全流程。

weixin_33724059的博客 383

java的list addall

如何实现Java的List addAll 概述 在Java中,List是一种可以存储多个元素的集合类。addlAll方法可以将一个集合中的所有元素添加到另一个集合中。在本文中,我将教你如何在Java中使用List的addAll方法。 流程 以下是如何实现Java的List addAll的步骤: 步骤 描述 1...

weixin_36904419的博客 595

基于STM32的Keil5代码自动补全设置操作指南

掌握Keil5代码自动补全设置技巧,提升STM32开发效率。通过合理配置编辑器选项,实现智能提示与语法补全,让嵌入式编程更流畅,尤其适合使用keil5代码自动补全设置的开发者快速上手。

weixin_32287387的博客 761

java指针与引用(转载)

1 大家都知道java和C#中没有指针这个概念。但是也导致了编程中常常忽略了对象与引用的区别,难道java真的没有指针吗?句柄是什么?变量地址在哪里?没有地址是不可能的,关键是java中如何避免了指针这个概念。 2 java中内存的分配方式有两种,一种是在堆中分配,一种是在堆栈中分配,所有new出来的对象都是在堆中分配的,函数中参数的传递是在栈中分配的。通常情况下堆的内存可以很大,比如3...

weixin_30532973的博客 630

Python GUI编程:视频播放器(opencv、tkinter、PIL、ffpyplayer、threading)

用了几天做了一个视频播放器,搞了几个版本,开始想的是运用cv2模块把视频转化成一张张图片,然后再用ffpyplayer模块下的相关类来播放视频。但是,结果画面和视频的音频播放不同步(原因是cv2将转换得到的图片展示到tk上canvas,花费的时间多于每张图片应该展示的时间[1/fps])。后面看到ffpyplayer这个模块官网的介绍,发现这个模块可以得到视频播放时的图片,只不过这个图片是一个对象,我对这个不是很了解,到网上找了很久,终于找到了一篇文章,说可以利用PIL模块下的相关类,把上述这个对象转化成。

坚持不懈的大白的博客 3405

华南理工大学-大学物理实验-不良导体热导率测量

不良导体热导率测量 引言 导热系数(又叫热导率)是反映材料热性能的重要物理量。热传导是热交换的三种(热传导、对流和辐射)基本形式之一,是工程热物理、材料科学、固体物理及能源、环保等各个研究领域的课题。材料的导热机理在很大程度上取决于它的微观结构,热量的传递依靠原子、分子围绕平衡位置的振动以及自由电子的迁移。在金属中电子流起支配作用,在绝缘体和大部分半导体中则以晶格振动起主导作用。因此,某种材料的导热系数不仅与构成材料的物质种类密切相关,而且还与材料的微观结构、温度、压力及杂质含量相联系。在科学实验和工程设计

mohen_777的博客 871

List.add() 是浅拷贝

@Test public void testListSoftCopy(){ List<SysUser> sysUserlist = new LambdaQueryChainWrapper<>(sysUserMapper) .list(); List<SysUserDto> sysUserDtos = new ArrayList<>(); SysUserDto sys...

洗刷先生的博客 282

Test软件:Keysight二次开发_(3).安装与配置开发环境

在开始进行Keysight软件的二次开发之前,首先需要确保您的开发环境已经正确安装和配置。本节将详细介绍如何安装和配置必要的开发工具和依赖项,以便您能够顺利进行开发工作。

2401_87715305的博客 1413

【053期】面试官问:说说 List 复制深拷贝和浅拷贝的用法与区别?

造成的后果就是,改变B的同时也会改变A,因为改变B就是改变B所指向地址的内容,由于A也指向同一地址,所以A与B一起改变。

2501_90252464的博客 588

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java list add方法和addAll方法效率

结论是: 在数据量较小时,add方法配合for循环遍历比addAll来得快.但是在大量数据时,addAll的方法的效率更高.list.addAll()是浅拷贝,只是将内存中的地址进行了拷贝,指向了原先list的末尾做了拼接.

一直在路上 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

探讨java 值引用和对象引用在addAll方法下的不同

  在优化代码的时候发现一个问题  ListA使用addAll 方法得到了ListB的值  但是我在修改ListA集合中某一个元素的值时 发现原集合ListB的值也跟着改变了 ;  该图片当时搞得我很懵,我刚开始只知道 ListA=ListB 的时候 改变ListA 的值 ListB的值也会跟着改 那为什么addAll方法也会造成这样的结果呢 直接百度  查! 集合中关于addAll的一...

h0422856的博客 2469

java ArrayList 的add方法和addAll方法的区别

List a = new ArrayList<>(); a.add(1); List b = new ArrayList<>(); b.add(2); List d = new ArrayList<>(); d.add(3); a.add(b); // add 方法 d....

每天进步一点点儿 4220

【踩坑记录】Java中List.addAll()是浅拷贝引发的一系列问题

尝试了很多种方法,都是浅拷贝(因为被拷贝的List对象中还套了一个List),最终是利用Json的序列化来实现的,但是在数据量大的时候可能会影响效率,所以还需要慎重考虑。是浅拷贝,即改变一个List,另一个List也会跟着变化,由此引发的bug找了一天时间…为了避免重复连接数据库,所以决定用copy List的方法来提升效率。接下来有空的时候会尽量研究一种效率更高的List.addAll方法。

水無的博客 1011

java list.addAll方法的一些使用记录

今天做同步排序的时候,要对所有的record进行相应的处理然后排序实现ZAKER中的某些功能,使用到LIst.addAll方法,但是不懂addall是浅拷贝还是深拷贝,于是写demo测试; 结果:List list1;  List list2;   list1.addAll(list2);对于两list而言,进行的是深拷贝,即对list2进行clear不会影响list1;但是若list里面存放的

lhs286266503的专栏 2785

Java List的深拷贝与浅拷贝

几种常见的浅拷贝 先设计一个Person类如下: 1.直接用“=”赋值

qq_41784749的博客 1万+

Java 如何复制 List ?

List 复制在项目开发时,使用到的频率还是比较高的。List 复制有浅拷贝和深拷贝两种方式。在陈述复制方法前,先总结下什么是浅拷贝和深拷贝(以下内容均站在 Java 语言基础上进行讨论)。浅拷贝只复制某个对象的引用,而不复制对象本身,新旧对象还是共享同一块内存。深拷贝会创造一个一模一样的对象,新对象和原对象不共享内存,修改新对象不会改变原对象。 假设 B 复制了 A,当修改 A 时,看 B 是否会发生变化。如果 B 也跟着变了,说明这是浅拷贝,如果 B 没变,那就是深拷贝。对于数据类型是基本数据类型(整型

长安明月的博客 4万+

Java List复制:浅拷贝与深拷贝方法及区别

Java List复制:浅拷贝与深拷贝方法及区别

Miaotou1998的博客 1239

List的浅拷贝和深拷贝

浅拷贝 1、遍历循环复制 List<Person> destList = new ArrayList<Person>(srcList.size()); for(Person p : srcList){ destList.add(p); } 2、使用List实现类的构造方法 List<Person> destList = new ...

yuemingxingxing的博客 458

java中list的深拷贝与浅拷贝

list的浅拷贝 list本质上是数组,而数组的是以地址的形式进行存储 如上图将list A浅拷贝给list B,由于进行的是浅拷贝,所以直接将A的内容复制给了B,java中相同内容的数组指向同一地址,即进行浅拷贝后A与B指向同一地址。造成的后果就是,改变B的同时也会改变A,因为改变B就是改变B所指向地址的内容,由于A也指向同一地址,所以A与B一起改变。 几种常见的浅拷贝 先设计一个Person类如下: 1.直接用“=”赋值 运行结果如下: 可见修改list2中的元素的内容后

hanbingge123的博客 656

List复制:深拷贝和浅拷贝用法及区别

以下文章来源方志朋的博客,回复”666“获面试宝典 作者:DeMonnnnnn blog.csdn.net/demonliuhui/article/details/54572908Li...

方志朋的博客 345

谈Java List 拷贝

    Java开发人员在开发过程中经常遇到需要对List进行复制的场景,在这些场景中又经常因为没注意浅拷贝和深拷贝的区别而出现异常,下面我们花一点时间,来谈谈Java List的拷贝问题。已经有很多文章列出浅拷贝和深拷贝的各种方式,我们针对使用场景,看看这些拷贝方法。       1. List的元素个数不变(而非元素内容不变)     这种场景主要是当不希望对进行增加/减少元素(不涉及修改已有...

hanfeng0306的博客 1906

关于list的addall深浅拷贝的问题

list的addall几乎不能用

a3213231的博客 254
上一篇: elipse启动报错
下一篇: ListView的getCheckedItemIds()方法
wangpanbaoding
博客等级 码龄18年 42粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值