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

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.kler.cn/a/446047.html

相关文章:

  • [ESP]从零开始的Arduino IDE安装与ESP环境配置教程
  • 最新ubuntu20.04安装docker流畅教程
  • 基于层次化设计方法,设计一个16位二进制全加器
  • 苹果手机怎么清理空间:拯救你的拥挤手机
  • linux-----网络编程
  • [网络安全]XSS之Cookie外带攻击姿势详析
  • 基于python+vue开发的图书借阅网站
  • windows自带16进制转10进制
  • 【数据库MySQL篇三】MySQL数据库入门基础教程:一网打尽SQL命令和语法
  • springboot462学生心理压力咨询评判(论文+源码)_kaic
  • linux----系统i/o
  • 多智能体/多机器人网络中的图论法
  • Java:基于SSM的旅游攻略管理系统
  • electron opacity 百分比设置不生效 变成1% 问题
  • STM32读写flash注意事项
  • 自动化立体仓库堆垛机SRM控制系统货叉控制功能块开发设计
  • 【操作系统】每日 3 题(七十二)
  • CSS|10 内填充padding外边距margin
  • UDP系统控制器_音量控制、电脑关机、文件打开、PPT演示、任务栏自动隐藏
  • 深入解析 OpenSSH 的核心原理
  • 鸿蒙学习笔记:用户登录界面
  • 震撼!最强开源模型通义千问2.5 72B竟在4GB老显卡上成功运行!
  • 基于 Vue 3 实现无限滚动翻页组件
  • linux java 查看异常堆栈
  • 文件包含include
  • Docker 设置代理的三种方法(2024年12月19日亲自测试)