Kotlin 中的数组操作

Array Operation in Kotlin

我想问的问题是关于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 的引用,因此清除 subAnswer 也会影响数组。

如果我想获得预期的行为,我该怎么做? 如果有任何关于这个问题的编程概念相关的博客,请让我知道。 谢谢。

首先,您将 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()