为了账号安全,请及时绑定邮箱和手机立即绑定

Android mutableListof(pair(k,v) --> 如果我清除变量

Android mutableListof(pair(k,v) --> 如果我清除变量

LEATH 2023-11-01 21:18:43
我将 mutableListOf 与pair() 一起使用,但我不明白它是如何工作的以及为什么工作。var x = mutableListOf<Pair<String, ArrayList<Long>>>()val y= ArrayList<Long>()val testNumber : Long = 5  y.add(testNumber )x.add(Pair("testString",testNumber))Log.i(TAG, "$x")  //--> x = [testString,[5]]y.clear()Log.i(TAG, "$x")  // --> x = [testString,[]]  so my testNumber value is empty
查看完整描述

1 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

首先,您输入的代码不应编译,因为pair接受ArrayList并且您输入了long。现在考虑这是一个拼写错误,并且在您的代码中,您在 x 的对中输入了 y 而不是 testNumber,您已经在对中添加了对 Arraylist 的引用。并且 y 和您对中的引用指向同一内存位置的同一对象。因此,当您清除 y 时,该内存位置的数据将被清除。而且由于您的对也指向已被清除的相同内存位置,因此您得到了空数据。这就像用他的正式姓名和昵称来称呼一个人一样,因为两者都指向同一个人。


解决方案应该是在将 y 添加到对之前先复制 y 并将该副本添加到该对中。尝试


x.add(Pair("testString",ArrayList(y))

或者您可以手动对 y 进行深层复制,然后将其输入到 x 中


查看完整回答
反对 回复 2023-11-01
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信