java - Android mutableListof(pair(k,v) --> 如果我清除变量,pair 值为空,但我在clear() 之前添加 mutableListof...为什么会为空?

标签 java android kotlin

我将 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

最佳答案

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

解决方案应该是在将 y 添加到配对之前先制作 y 的副本,并将该副本添加到配对中。 尝试一下

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

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

关于java - Android mutableListof(pair(k,v) --> 如果我清除变量,pair 值为空,但我在clear() 之前添加 mutableListof...为什么会为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58422148/

相关文章:

java - 通过Charset确定特殊字符

java - 在 Liferay 中搜索组织下的用户

java - AsyncTask - 缺少一些东西

android - Android 中的音频文件流无法在 Android 2.3 上运行

android - Flutter:http get 请求在 apk 版本上不起作用

android - 检测到 NFC 标签时显示 toast 消息

java - 如何在 Kotlin 中组合 lambda

java - 如何使用 Java 在控制台中打印任何 PostgreSQL 查询结果?

java - eclipse 项目 : tomcat server , jdk 、外部库等的设置

java - 用户定义异常 : when do we use them? 什么是 "exceptional"情况?