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

news/2024/12/22 18:06:55 标签: java, 数据库, 开发语言, 数据结构, 后端, 算法

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.niftyadmin.cn/n/5795679.html

相关文章

常用的JVM启动参数有哪些?

大家好&#xff0c;我是锋哥。今天分享关于【常用的JVM启动参数有哪些?】面试题。希望对大家有帮助&#xff1b; 常用的JVM启动参数有哪些? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 JVM启动参数用于配置Java虚拟机&#xff08;JVM&#xff09;的运行时行为…

从Windows远程访问Linux上的数据库

从Windows远程访问Linux上的数据库 目录 简介在Linux上安装MySQL/MariaDB配置MySQL/MariaDB以允许远程连接 修改MySQL/MariaDB配置文件重启MySQL/MariaDB服务确保防火墙允许MySQL/MariaDB端口 创建远程访问用户授予用户权限测试远程连接 检查网络连通性使用图形化工具连接 创…

Webpack学习笔记(4)

1.缓存 可以通过命中缓存降低网络流量&#xff0c;是网站加站速度更快。 然而在部署新版本时&#xff0c;不更改资源的文件名&#xff0c;浏览器可能认为你没有更新&#xff0c;所以会使用缓存版本。 由于缓存存在&#xff0c;获取新的代码成为问题。 接下来将配置webpack使…

idea部署maven项目步骤(图+文)

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…

Java模拟多个Mqtt客户端连接Mqtt Broker

上一次我们介绍了Java模拟单个Mqtt客户端的场景&#xff0c;但是在实际的业务场景中&#xff0c;可能需要我们模拟多个Mqtt客户端&#xff0c;比如&#xff1a;我们要对云平台的连接和设备上下行做压测。 Java模拟多个Mqtt客户端基本流程 引入Paho MQTT客户端库 <depende…

从DINO到DINOv2——自监督视觉Transformer的升级改进之路(基于ViT)

前言 之所以关注到DINOV2&#xff0c;原因在于我解读多个具身机器人模型时——发现他们的视觉基座都用的DINOV2&#xff0c;比如 rekepOpen-TeleVisionOpenVLACogACTOKAMI 不过&#xff0c;实话讲&#xff0c;DINO论文的可读性是真的不高&#xff0c;使得本次解读不易..总之…

Everything实现,快速搜索文件

最近编写NTFS文件实时搜索工具, 类似 Everything 这样, 翻阅了很多博客, 结果大致如下: 1.分析比较肤浅, 采用USN日志枚举来获取文件记录 速度一言难尽, 因为日志枚举的是全盘所有文件的所有日志, 记录比文件记录还多, 速度当然很慢, 还有的甚至于是 使用 DeviceIoControl 函数…

Golang学习历程【第四篇 运算符流程控制】

Golang学习历程【第四篇 运算符&流程控制】 1. 运算符1.1 算术运算符1.2 关系运算符1.3 逻辑运算符1.4 赋值运算符1.5 其他运算符 2. 二进制运算3. 流程控制3.1 条件表达式if3.2 for循环3.3 for range(键值循环)3.4 switch...case3.5 break,continue,goto 1. 运算符 1.1 算…