res.add(new ArrayList<>(path))和res.add(path)的区别

news2024/11/28 20:58:13

一.问题描述

在链表path里面添加值,之后把path链表添加到res链表中,自己做的时候使用res.add(path),结果发现出现解答错误。

题目链接:113. 路径总和 II - 力扣(LeetCode)

代码如下

class Solution {
    public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
        List<List<Integer>> res = new ArrayList<>();
        if(root==null){
            return res;
        }
        List<Integer> path = new ArrayList<>();
        dfs(root,targetSum,res,path);
        return res;
    }
        public void dfs(TreeNode root,int targetSum,List<List<Integer>> res,List<Integer> path){
            path.add(root.val);
            if(root.left==null&&root.right==null){
                if(targetSum==root.val){
                    res.add(new ArrayList<>(path));
                }
                return;
            }
            if(root.left!=null){
                dfs(root.left,targetSum-root.val,res,path);
                path.remove(path.size()-1);
            }
              if(root.right!=null){
                dfs(root.right,targetSum-root.val,res,path);
                path.remove(path.size()-1);
            }
        }
    }

共同点:
  都是向res这个ArrayList中填加了一个名为path的链表

不同点:

  • res.add(new ArrayList(path)):开辟一个独立地址,地址中存放的内容为path链表,后续path的变化不会影响到res

  • res.add(path):将res尾部指向了path地址,后续path内容的变化会导致res的变化。

总结:被压入栈的变量也会因为后续该变量的改变而改变,引用内存的引用也会随着实例对象的改变而改变。

二.例子测试

期望输出是

[]
[[a, b, c]]
[[a, b, c], [a, b, c, d]]

1.用res.add(path)

public class Solution {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        List<List<String>> result = new ArrayList<>();
        //1.输出为空
        System.out.println(result);
        //2.第一次添加,res值应该为abc
        result.add(list);
        System.out.println(result);
        //3.第二次添加,res值按照自己的猜想应该是abc,abcd
        list.add("d");
        result.add(list);
        System.out.println(result);
        System.out.println("使用res.add(path)");
    }
}

image-20221105121632881

与期望输出不一样

原因如下:因为被压入栈的变量也会因为后续该变量的改变而改变,指向的是同一个地址,所以之前的也改变了。

2.用res.add(new ArrayList(path))

public class Solution {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        List<List<String>> result = new ArrayList<>();
        //1.输出为空
        System.out.println(result);
        //2.第一次添加,res值应该为abc
        result.add(new ArrayList<>(list));
        System.out.println(result);
        //3.第二次添加,res值按照自己的猜想应该是abc,abcd
        list.add("d");
        result.add(new ArrayList<>(list));
        System.out.println(result);
        System.out.println("使用res.add(new ArrayList(path))");
    }
}

image-20221105122135124

与期望输出一样

原因如下:new ArrayList<>(list)是又开辟一个独立地址,地址中存放的内容为path链表,后续path的变化不会影响到res,所以每次new都会开辟一个新的地址来存放path链表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/3568.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络初始之网络协议

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录 文章目录 前言 1.局域网&#xff1a; 概念&#xff1a; 构建方式 2.广域网&#xff1a; 3.IP地址&#xff1a; 4. 端口号&#xff1a; 常考点&#xff1a; 一、…

【单端S参数与差分S参数转化】

单端S参数与差分S参数转化 1 单端S参数说明 对于单端信号来说&#xff0c;用单端S参数来描述其传输特性&#xff0c;如常见的2端口网络&#xff0c;其S参数包括S11&#xff08;1端口回波损耗RL&#xff09;、S21&#xff08;插入损耗IL&#xff09;、S12&#xff08;插入损耗…

[JSON] JSON基础知识

JSON(JavaScript Object Notation&#xff0c;JavaScript对象表简谱)是一种轻量级的数据交换格式&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据 JSON文件的文件类型是.json JSON是纯文本&#xff0c;具有层级结构&#xff0c;易于阅读和编写&#xff0c;其本…

【愚公系列】2022年11月 微信小程序-优购电商项目-商品支付页面

文章目录前言1. 商品⽀付页面设计规范一、商品支付页面1.业务逻辑2.涉及的接口数据3. 关键技术二、商品购物车页面相关代码1.页面代码2.效果前言 1. 商品⽀付页面设计规范 第一、支付流程一定要简单。现代人的生活节奏是非常快速的&#xff0c;而且情绪比较浮躁。当用户在浏览…

深入理解Java内存区域(最新版面试题)

1、什么是JVM&#xff1f; JVM&#xff08;Java Virtual Machine&#xff09;是用于运行Java字节码的虚拟机&#xff0c;包括一套字节码指令集、一组程序寄存器、一个虚拟机栈、一个虚拟机堆、一个方法区和一个垃圾回收器。JVM运行在操作系统之上&#xff0c;不与硬件设备直接交…

微信小程序消息订阅Java

前言 编写日期 : 2022-11-04 写这篇文章原因 公司给政府做一个订餐系统&#xff0c;需要在员工在小程序上发起订餐后经过部门领导和书记的审批后&#xff0c;再由食堂确认订餐结果。在订餐审批单在各个节点流转的过程中&#xff0c;需要给每一个节点的审批人发送微信订阅消息…

Linux企业应用——Docker(三)之史上最简单,一篇学会Docker私有仓库Harbor的搭建

文章目录一、什么是Harbor二、搭建私有仓库1.安装docker-ce2.安装软件库包3.创建认证三、在另一台已安装docker的主机上四、搭建Harbor测试docker hub虽然方便&#xff0c;但是还是有限制&#xff1a;• 需要internet连接&#xff0c;速度慢• 所有人都可以访问• 由于安全原因…

SharpShooter Reports.Web 7.5 Crack

SharpShooter Reports.Web 是真正的跨平台报告查看器&#xff0c;因为它能够向 Windows、Linux、Mac OS 甚至 iOS 和 Android 平板电脑和手机提供报告。创建的报告可以轻松集成到任何网站和网页中&#xff0c;包括 MS MVC 和 ASP.NET 应用程序。by Ω578867473报告设计方便易用…

22级第三次比赛题解

文章目录A (1). Ashy与几何(贪心几何)B (2). One eye question of hengheng(前缀和)C Fox hate oranges(模拟)D KingZhangs Similar pair (思维)E (5). 38秒你敢交我A题&#xff1f;F (6). How many numbers are thereG (7). Jump lattice (思维)H (8). CCoolGuang Conjecture(…

五十万字总结,2022最新Java面试八股汇总(含答案,收藏版)

写在前面 今年的疫情&#xff0c;让招聘面试变得雪上加霜。已经有不少大厂&#xff0c;如腾讯、字节跳动的招聘名额明显减少&#xff0c;面试门槛却一再拔高&#xff0c;如果不用心准备&#xff0c;很可能就被面试官怼得哑口无言&#xff0c;甚至失去了难得的机会。 现如今&a…

【网安神器篇】——瑞士军刀Netcat

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座右…

G1D5-Intriguing properties of neural networks

今天考完软考中项啦~~明天还有翻译&#xff0c;不过不想复习啦~ 读读论文啦~读网络安全文献课需要的叭 这篇2013年的intruging properties of neural networks的作者都好大佬&#xff01;&#xff01;&#xff01; 先来看看h指数是什么哈~ 一、h指数 一个人的所有论文中&…

C语言题解 | 去重数组合并数组

… &#x1f333;&#x1f332;&#x1f331;本文已收录至&#xff1a;C语言题解系列 更多知识尽在此专栏中&#xff01; 文章目录&#x1f349;前言&#x1f349;正文&#x1f34d;去重数组&#x1f34c;分析&#x1f34c;思路&#x1f34c;代码&#x1f34d;合并数组&#x1…

Allegro基本规则设置指导书之Physical规则设置

Allegro基本规则设置指导书之Physical规则设置 下面介绍规则设置指导书之Physical规则设置 点击Set-up-constraints-Constraint Manager打开规则管理器 设置Physical规则 打开时默认有个Default规则 从左往右 Line Width 最小线宽 最大线宽 Neck 最小线宽 Neck的走线长度 如…

动态内存分配:malloc、calloc、realloc(超详解析,多维度分析,小白一看就懂!!!!)

目录 一、前言 二、动态内存的简单介绍 &#x1f349;什么是动态内存分配 &#x1f34e;为什么要使用动态内存分配 三、动态内存函数的介绍和拓展 &#x1f34b;malloc()函数 &#x1f34a;free()函数 &#x1f34c;calloc()函数 &#x1f347;realloc()函数 四、…

UDP套接字编程详解

UDP 是OSI&#xff08;Open System Interconnection&#xff0c;开放式系统互联&#xff09; 参考模型中一种无连接的传输层协议。 UDP协议与TCP协议一样用于处理数据包。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点&#xff0c;也就是说&#xff0c;当报文发送之…

【状语从句练习题】综合训练

1. 改正错误 1.第二个 either 改为or 2.后面的 he plays 去掉&#xff0c;不必要的重复 3.but 去掉 4.cold 后 and 5.I went out. 加 个 I. 6.第一个 will 去掉&#xff0c;get 变为 ges 7.so 去掉 8.去掉第二个 either 9.去掉后面的 I need 10.Although/but 去掉一个 11.后…

【JavaSE】类和对象——上

文章目录1. 类的定义1.1 什么是类1.2 如何定义类2. 类的实例化3. this关键字3.1 this访问成员变量和成员方法3.2 构造方法及this()我们给类初始化的方法有&#xff1a;3.2.1 就地初始化3.2.2 使用 set 方法赋值3.2.3 使用构造方法4. 如何便捷的打印对象中属性1. 类的定义 1.1 什…

【Pytorch Lighting】第 1 章:PyTorch Lightning adventure

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

数据中心通识

文章目录一 数据中心定义特点二 机房定义内部物品物理环境三 服务器定义外型分类与PC相比的优点超线程技术固态硬盘和机械硬盘四 网络定义OSI模型局域网的拓扑结构TCP/IP协议常见端口号IP地址介绍、格式、分类、子网掩码DNS三层交换机五 存储格式化缓存RAID技术存储体系架构IP-…