您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

res.add(r)

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

但是请注意,两者r和内部的引用res都指向 一个对象

当您执行此操作时,temp会发生以下情况:

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

为什么这很重要?

基本上,您的递归步骤向中添加一个元素rfind再次调用,然后从中删除一个元素rrres中的引用沿递归传递,这意味着这两个相同的对象沿递归传递。

但是由于从递归中返回后,您主动从中删除一个对象r,这意味着最后,当您完全向上移动时,内部将不再有元素r

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

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

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

其他 2022/1/1 18:29:09 有580人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶