JAVA队列每次添加需要新实例才能独立更新

ops/2024/12/23 1:15:04/

JAVA队列每次添加需要新实例才能独立更新

  • 队列里面的实例
  • 多次添加同一个实例
    • 实例
    • 结果
  • 每次添加一个新实例
    • 实例
    • 结果
  • 队列中添加包装类型
    • 实例
    • 结果

队列里面的实例

由于JAVA对于Object类型参数传参传递的是地址,实例更新,队列里面的实例也会被更新。关于JAVA参数传递与值的变化关系可以查看这里。

多次添加同一个实例

如果多次添加的是同一个实例,实例值的更新会影响到队列里全部该实例的值。

实例

java">        ArrayList<LinkedList<Integer>> resultList = new ArrayList<>();LinkedList<Integer> tempList = new LinkedList<>();tempList.add(1);resultList.add(tempList);tempList.add(3);resultList.add(tempList);System.out.println(resultList);

结果

[[1, 3], [1, 3]]

可以看到队列中全部对象发生了值的变化。

每次添加一个新实例

如果每次添加一个新实例,受影响的就只是单个实例。

实例

java">        ArrayList<LinkedList<Integer>> resultList = new ArrayList<>();LinkedList<Integer> tempList1 = new LinkedList<>();LinkedList<Integer> tempList2 = new LinkedList<>();tempList1.add(1);resultList.add(tempList1);tempList2.add(3);resultList.add(tempList2);tempList2.add(4);System.out.println(resultList);

结果

[[1], [3, 4]]

可以看到队列中只有第二个对象发生了值的变化。

队列中添加包装类型

实例

java">        ArrayList<LinkedList<Integer>> resultList = new ArrayList<>();LinkedList<Integer> tempList = new LinkedList<>();resultList.add(tempList);Integer value = Integer.valueOf(10);tempList.add(value);tempList.add(value);value = 20;System.out.println(resultList);

value = 20这里是新创建了一个Integer实例,详情可查看,然后赋值给value,value的值改变了。

结果

[[10, 10]]

可以看到队列中没有一个对象发生值的变化。这是由于队列中存储的包装类的地址跟value = 20新创建的实例地址不一致,大家互不影响。由于包装类每次值的更新都是新创建一个实例,这里可以参考String, StringBuilder, StringBuffer, StringJoiner区别中对String的描述以及JAVA包装类变量赋值是会新创建对象实例。而队列类中不能添加基本类型,这里可以忽略基本类型不作讨论。如果想要队列中的对象发生值的变化则要将更新队列中的对象地址。可以参考下面的实例。

java">        ArrayList<LinkedList<Integer>> resultList = new ArrayList<>();LinkedList<Integer> tempList = new LinkedList<>();resultList.add(tempList);Integer value = Integer.valueOf(10);tempList.add(value);tempList.add(value);value = 20;tempList.set(1, value);System.out.println(resultList);

通过队列的set()方法直接更新队列中第二个对象的地址。结果如下:

[[10, 20]]

可以看到,队列中第二个对象的值发生了变化。


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

相关文章

Pytorch应用实战(1)- 基于YOLO的视频人脸马赛克处理

免费链接: Blogger(需翻Q), Github 文章目录 本文介绍给图片的人脸打码给视频的人脸打码本文介绍 YoloV11(Github)提供了非常方便的API帮助用户实现目标检测(detect)、语义分割(segement)、肢体识别(Pose)等功能。 本文将基于YoloV11的目标检测来实现一个视频人脸马…

视频点播系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库…

postmam 请求报 Bad Request This combination of host and port requires TLS.解决办法

方案1&#xff1a;如果是postman请求&#xff1a;setting中把ssl证书验证关闭 方案2&#xff1a;查看请求地址&#xff0c;将http改为https 方案3&#xff1a;端口缓存问题&#xff0c;清除端口缓存

lshw学习——简单介绍

文章目录 简介核心结构扫描设备原理scan_abiscan_burnerscan_cdromscan_cpufreqscan_cpuidscan_cpuinfoscan_device_treescan_diskscan_displayscan_dmiscan_fatscan_fbscan_graphicsscan_idescan_ideraidscan_inputscan_isapnpscan_lvmscan_memoryscan_mmcscan_mountsscan_net…

最大堆【东北大学oj数据结构9-2】C++

满足“节点键值小于或等于其父键值”的最大堆条件的堆称为最大堆。 在最大堆中&#xff0c;最大的元素存储在根中&#xff0c;以某个节点为根的子树的节点的键值小于或等于该子树的根的键值。 请注意&#xff0c;只有父母和孩子之间有大小关系&#xff0c;兄弟姐妹之间没有限制…

.NET周刊【12月第2期 2024-12-08】

国内文章 终于解决了.net在线客服系统总是被360误报的问题&#xff08;对软件进行数字签名&#xff09; https://www.cnblogs.com/sheng_chao/p/18581139 升讯威在线客服与营销系统由.net core和WPF开发&#xff0c;旨在开放、开源、共享。开发者为解决360与其他国产管家的误…

SpringBoot项目的创建方式

目录 1.通过idea创建SpringBoot项目 2.在idea中通过aliyun创建SpringBoot 3.通过spring官网下载再用idea打开 5.通过mavenjava项目改为springboot项目 6.测试springboot 第二种方法使用的是idea2021版本&#xff0c;其余方法使用idea2017版本 1.通过idea创建SpringBoot项…

基于ubuntu的mysql 8.0安装教程

文章目录 1.查看版本2.切换到root账户3.下载安装包4.问题的解决5.查看是否解压成功6.安装我们的发布包7.更新包的内容8.下载mysql9.查看mysql的状态10.设置开机自启动11.登录mysql 公司里面的mysql根本不会出现在windows操作系统上面&#xff0c;下面我们演示的就是如何在ubunt…