我正在使用带有pair()的mutableListOf,但我不明白它的工作方式和原因。

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

最佳答案

首先,您输入的代码不应编译,因为代码对接受ArrayList并且您放置了很长时间。
现在考虑一下这是一个错字,在代码中您输入y而不是在x中的对中输入testNumber,您已经在对中添加了对Arraylist的引用。 y和您的参考对指向相同对象的相同存储位置。因此,当您清除y时,该内存位置的数据将被清除。而且由于您的配对还指向了已被清除的同一存储位置,因此您得到了空数据。就像用官方名称和昵称呼唤一个人都指向同一个人一样。

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

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


或者您可以手动创建y的deepCopy,然后在x中输入

09-11 06:10