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

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

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

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

队列里面的实例

由于JAVA对于Object类型参数传参传递的是地址,实例更新,队列里面的实例也会被更新。关于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]]

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

每次添加一个新实例

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

实例

        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]]

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

队列中添加包装类型

实例

        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的描述以及包装类变量赋值是会新创建对象实例。而队列类中不能添加基本类型,这里可以忽略基本类型不作讨论。如果想要队列中的对象发生值的变化则要将更新队列中的对象地址。可以参考下面的实例。

        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.mrgr.cn/news/80945.html

相关文章:

  • C++ 智能指针(高频面试题)
  • C++如何实现对象的克隆?
  • 2024.2 ACM Explainability for Large Language Models: A Survey
  • leecode494.目标和
  • 监控MySQL数据表变化:Binlog的重要性及实践
  • 【软考高级】系统架构设计师复习笔记-精华版
  • Docker镜像启动
  • 门户系统需要压测吗?以及门户系统如何压力测试?
  • 【操作系统不挂科】<内存管理-文件系统实现(18)>选择题(带答案与解析)
  • 什么是静态站点生成器,有哪些特点
  • Python毕业设计选题:基于Python的农产品销售系统的设计与实现_django
  • 稀疏矩阵的存储与计算 gaxpy
  • Spring Cloud Gateway 源码
  • CogVideoX: Text-to-Video Diffusion Models with An Expert Transformer 论文解读
  • Linux shell脚本用于常见图片png、jpg、jpeg、tiff格式批量转webp格式后,并添加文本水印
  • 【C语言程序设计——入门】C语言入门与基础语法(头歌实践教学平台习题)【合集】
  • 游戏开发技能系统常用概念
  • 云计算HCIP-OpenStack02
  • 基础2:值类型与右值引用
  • redo log 和 undo log
  • 实现 WebSocket 接入文心一言
  • Golang学习历程【第二篇 fmt包变量、常量的定义】
  • aosp15 - App冷启动
  • 编译原理复习---基本概念+推导树
  • 云计算HCIP-OpenStack01
  • 滴滴的logicFlow流程图组件