我將 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貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
首先,您輸入的代碼不應(yīng)編譯,因?yàn)閜air接受ArrayList并且您輸入了long?,F(xiàn)在考慮這是一個(gè)拼寫錯(cuò)誤,并且在您的代碼中,您在 x 的對中輸入了 y 而不是 testNumber,您已經(jīng)在對中添加了對 Arraylist 的引用。并且 y 和您對中的引用指向同一內(nèi)存位置的同一對象。因此,當(dāng)您清除 y 時(shí),該內(nèi)存位置的數(shù)據(jù)將被清除。而且由于您的對也指向已被清除的相同內(nèi)存位置,因此您得到了空數(shù)據(jù)。這就像用他的正式姓名和昵稱來稱呼一個(gè)人一樣,因?yàn)閮烧叨贾赶蛲粋€(gè)人。
解決方案應(yīng)該是在將 y 添加到對之前先復(fù)制 y 并將該副本添加到該對中。嘗試
x.add(Pair("testString",ArrayList(y))
或者您可以手動(dòng)對 y 進(jìn)行深層復(fù)制,然后將其輸入到 x 中
添加回答
舉報(bào)
0/150
提交
取消