我想问的问题是关于kotlin中与编程相关的问题。这个问题可能看起来很糟糕,但我想不出如何处理这种情况。
val array = ArrayList<ArrayList<Int>>()
val subAnswer = ArrayList<Int>()
subAnswer.add(1)
subAnswer.add(2)
subAnswer.add(3)
array.add(subAnswer)
subAnswer.clear()
如果我打印出数组,它是空的。我所期望的行为是subAnswer被清除,但数组将包含[[1,2,3]]我想知道为什么。它不应该包含[[1,2,3]]吗?为什么清除subAnswer也会清除数组?如何解决?
我认为一个对象被复制并添加到数组中,所以添加到数组的对象和subAnswer不共享相同的内存地址。在这种情况下,添加的对象似乎只是subAnswer的引用,因此清除subAnswers也会影响数组。
如果我想得到预期的行为,我该怎么做?如果有任何关于这个问题的编程概念相关博客,请告诉我。非常感谢。
首先,您将subAnswer中包含的数组的引用添加到变量数组中,然后清除该引用中的值。
由于它们是堆中相同的引用,将其从一个变量更改为另一个变量
为了保存列表,你可以复制它,
array.add(ArrayList(subAnswer)) // <- creates a new ArrayList with elements from subAnswer
subAnswer.clear()
PS:在Kotlin中不建议直接使用ArrayList,您应该使用MutableList
val list = mutableListOf<List<Int>>() // or use MutableList instead if you like too use
val subAnswer = mutableListOf<Int>()
subAnswer.add(1)
subAnswer.add(2)
subAnswer.add(3)
list.add(subAnswer.toList()) // copies and create new list, or use toMutableList to create a mutable list
subAnswer.clear()