栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么我需要另一个新的ArrayList而不是将现有的传递给ArrayList?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么我需要另一个新的ArrayList而不是将现有的传递给ArrayList?

正如另一个答案所说,这样做:

res.add(r)

r
在列表中添加对同一对象的引用。实际上,这里发生的是:

  • r
    指清单
  • 该引用作为参数传递给
    add
  • 对列表的引用存储在内部
    res

但是请注意,两者

r
和内部的引用
res
都指向 同一个对象

当您执行此操作时,

temp
会发生以下情况:

  • 创建一个新列表,并用引用原始列表中所有数据的副本
    r
  • 此列表已分配给
    temp
  • 对新列表的引用作为参数传递给
    add
  • 对列表的引用存储在内部
    res

因此,现在

r
指向列表的原始副本,而内部引用
res
指向列表的新副本。它们是两个不同的对象。

为什么这很重要?

基本上,您的递归步骤向中添加一个元素

r
find
再次调用,然后从中删除一个元素
r
r
res
中的引用沿递归传递,这意味着这两个相同的对象沿递归传递。

但是由于从递归中返回后,您主动从中删除了一个对象

r
,这意味着最后,当您完全向上移动时,内部将不再有元素
r

由于存储在内部的引用

res
指向的 是同一对象
r
,而不是其副本,因此,当您使用删除项目时
r.remove()
,该对象将变为空。但这是我们从内部引用的对象
res
。因此,在递归结束时,它将为空。

认为它是安全的。A人用金钱装满保险柜。然后,他将B人的第二把钥匙交给保险箱。然后,他用原来的钥匙进入,取出了所有的钱。当B来打开保险柜时,它是空的!

复制此列表等效于A给予B自己的钱以放入自己的保险箱。A可以从自己的保险箱中取出任意多的钱,而且不会改变B保险箱中的钱数。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/506399.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号