Android mutableListof (pair (k, v) -> значение пары пусто, если я очищаю переменную, но я добавляю mutableListof перед clear () ... почему будет пусто? - PullRequest
0 голосов
/ 17 октября 2019

Я использую 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 Ответ

0 голосов
/ 17 октября 2019

Прежде всего код, который вы ввели, не должен компилироваться, потому что pair принимает ArrayList, а вы ставите long. Теперь, учитывая, что это опечатка, в своем коде вы указали y вместо testNumber в вашей паре в x, вы добавили ссылку на Arraylist в вашей паре. И у, и ваша ссылка в вашей паре указывает на один и тот же объект в той же ячейке памяти. поэтому, когда вы очищаете y, данные в этом месте памяти очищаются. А так как ваша пара также указывает на ту же ячейку памяти, которая уже была очищена, следовательно, вы получаете пустые данные. Это все равно, что называть человека с его официальным именем и псевдонимом, поскольку оба указывают на одного и того же человека.

Решение должно состоять в том, чтобы сделать копию буквы y, прежде чем добавить ее в пару, и добавить эту копию в пару. попробуйте

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

или вы можете вручную сделать deepCopy of y, а затем введите его в x

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...