首页 > 编程语言 >Java开发笔记之将一个List拷贝到另一个List的问题

Java开发笔记之将一个List拷贝到另一个List的问题

时间:2023-05-23 10:34:03浏览次数:57  
标签:Java list1 List System list2 println 拷贝到 out

0x00 概述

在对List数据进行不同的数据操作的时候,例如分支1将List按照A来排序,分支2将List按照B来排序,需要将List进行数据层面的拷贝;

 

0x01 错误的操作

仅仅是List的引用,并没拷贝List内的数据进行处理

List<String> list1 = new ArrayList<>();
List<String> list2 = new ArrayList<>();
list1=list2
List<String> list1 = new ArrayList<>();
list1.add("1");
list1.add("2");
list1.add("3");
list1.add("4");
List<String> list2 = new ArrayList<>();
list2 = list1;
System.out.println("移除第一个值前:");
System.out.println("list1:"+list1);
System.out.println("list2:"+list2);
list2.remove(list2.get(0));
System.out.println("移除第一个值后:");
System.out.println("list1:"+list1);
System.out.println("list2:"+list2);

输出结果:

移除第一个值前:
list1:[1, 2, 3, 4]
list2:[1, 2, 3, 4]
移除第一个值后:
list1:[2, 3, 4]
list2:[2, 3, 4]

我们可以看到对list2进行操作时list1的值也被修改了
其实list1只是对list2的引用,并没有重新new一个空间去存放list1的值;

 

0x02 List数据层面的拷贝

2.1 List传值

List<String> list1 = new ArrayList<>();
list1.add("1");
list1.add("2");
list1.add("3");
list1.add("4");
List<String> list2 = new ArrayList<>(list1);
System.out.println("移除第一个值前:");
System.out.println("list1:"+list1);
System.out.println("list2:"+list2);
list2.remove(list2.get(0));
System.out.println("移除第一个值后:");
System.out.println("list1:"+list1);
System.out.println("list2:"+list2);

输出结果:

移除第一个值前:
list1[1, 2, 3, 4]
list2[1, 2, 3, 4]
移除第一个值后:
list1[1,2, 3, 4]
list2[2, 3, 4]

2.2 list.addAll()方法

List<String> list1 = new ArrayList<>();
list1.add("1");
list1.add("2");
list1.add("3");
list1.add("4");
List<String> list2 = new ArrayList<>();
list2.addAll(list1);
System.out.println("移除第一个值前:");
System.out.println("list1:"+list1);
System.out.println("list2:"+list2);
list2.remove(list2.get(0));
System.out.println("移除第一个值后:");
System.out.println("list1:"+list1);
System.out.println("list2:"+list2);

输出结果:

list1:[1, 2, 3, 4]
list2:[1, 2, 3, 4]
移除第一个值后:
list1:[1, 2, 3, 4]
list2:[2, 3, 4]

 

0x03 参考

java 一个List给另一个list 赋值问题

 

标签:Java,list1,List,System,list2,println,拷贝到,out
From: https://www.cnblogs.com/JetpropelledSnake/p/17422559.html

相关文章

  • 用chatGPT快速开发java后端功能
     接到一个紧急需求如图常规无非是建表,写接口,写测试类,最后造数据进行自测。突发奇想,要不用GPT4试一下快速写业务代码? 写句子1分钟,建表和得到代码1分钟第一步:建表,直接复制excel中内容到GPT中 第二步:要求转为下划线:  第三步:给出条件和想要的结果(下面第一幅图是自己写......
  • java.lang.IndexOutOfBoundsException: Invalid range
    报文:ERROR:17:38:36,099-TcLogger$IC_PrintStream.logButCheckForException:?java.lang.IndexOutOfBoundsExceptionjava.lang.IndexOutOfBoundsException:Invalidrange atjavax.swing.DefaultRowSorter.rowsUpdated(UnknownSource) atjavax.swing.DefaultRowSor......
  • 一篇文章告诉你什么是Java内存模型
    在上篇并发编程Bug起源:可见性、有序性和原子性问题,介绍了操作系统为了提示运行速度,做了各种优化,同时也带来数据的并发问题,定义在单线程系统中,代码按照顺序从上往下顺序执行,执行不会出现问题。比如一下代码:inta=1;intb=2;intc=a+b;程序从上往下执行,最终c的结果......
  • java学习日记20230522-TreeSet
    有序键值对集合publicclassTreeSetExercise{publicstaticvoidmain(String[]args){Integerinteger=newInteger(10);TreeSettreeSet=newTreeSet(newComparator(){@Overridepublicintcompare(Objecto1,Obj......
  • java学习日记20230522-集合选择原则
    1.判断存储的类型,一组对象【单列】或者一组键值对【双列】2.一组对象【单列】:collection的子类:允许重复:List的某个实现类:增删多LinkedList(底层维护的是双向链表)                                改查多ArrayList(底层维护的是object类型的可......
  • JavaScript函数
    1函数定义使用function关键字来定义,即functionfName(para,...){statment;...;},可使用在函数声明语句与函数定义表达式这两种形式中函数名称标识符fName。是函数声明语句必需的部分。它的用途就像变量的名字,新定义的函数对象会赋值给这个变量但对函数定义表达式来说......
  • Java设计模式-组合模式
    简介在软件设计中,设计模式是一种被广泛接受和应用的经验总结,旨在解决常见问题并提供可复用的解决方案。组合模式是一种结构型设计模式,它允许将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式能够使客户端以一致的方式处理单个对象和对象集合,将对象的组合与对象的使......
  • Java-Servlet解析
    前言从事Javaweb项目开发有一段时间了,一直不理解它是怎么一回事,后来查询资料发现这里面涉及到几个东西,分别是tomcat、JavaEE中13个规范之一的servlet、以及springMVC。于是就去学习了一下,发现这里里面都是围绕这servlet进行的操作。于是就有了今天的这个总结。Servlet定义Servl......
  • 基于JAVA的springboot+vue“智慧食堂”设计与实现,食堂管理系统,附源码+数据库+lw文档+P
    1、项目介绍本系统的用户可分为用户模块和管理员模块两大界面组成。一个界面用于管理员登录,管理员可以管理系统内所有功能,主要有首页,个人中心,用户管理,菜品分类管理,菜品信息管理,留言板管理,系统管理,订单管理等功能;另一界面用于用户登录,用户进入系统可以实现首页,菜品信息,留言板,个人......
  • idea中jdk11用maven编译失败 Fatal error compiling: tools.jar not found: XX\Java
    ideamaven编译需要用到jdk的lib包里面的tools.jar文件,但是jdk1.8之后就没有tools.jar了。我这里用的是graalvm的jdk11,编译一直报错,网上也查不到。解决办法: 根据对应路径创建一个lib包,并把jdk1.8的lib下面的tools.jar复制一个放到这个包下面,让这个路径有这个包就行了。我......