2

下午好,亲爱的 StackOverflow 社区,

我在 Kotlin 中使用 MutableList 时遇到问题。更具体地说,我没有成功在 MutableList 中添加 MutableList

比如后面的例子

fun main() {

    var mutableListIndex: MutableList<Int> = mutableListOf<Int>()
    var mutableListTotal: MutableList<MutableList<Int>> = mutableListOf<MutableList<Int>>()

    for(i in 0..5) {
        mutableListIndex.add(i)
        println(mutableListIndex)

        mutableListTotal.add(mutableListIndex)
        println(mutableListTotal)

    }
}

我得到以下结果

[0]
[[0]]
[0, 1]
[[0, 1], [0, 1]]
[0, 1, 2]
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]
[0, 1, 2, 3]
[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]
[0, 1, 2, 3, 4]
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
[0, 1, 2, 3, 4, 5]
[[0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5]]

虽然,我期待之后的结果

[0]
[[0]]
[0, 1]
[[0], [0, 1]]
[0, 1, 2]
[[0], [0, 1], [0, 1, 2]]
[0, 1, 2, 3]
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3]]
[0, 1, 2, 3, 4]
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]
[0, 1, 2, 3, 4, 5]
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4, 5]]

我无法理解我错在哪里,因为在我看来,从严格的算法角度来看,代码是好的。

有人可以帮我解释我的错误吗?

您忠诚的

4

2 回答 2

1

遵循上述 Animesh Sahu 爵士的建议,我终于遵循了这个解决方案:

fun main() {

    var mutableListIndex: MutableList<Int> = mutableListOf<Int>()
    var mutableListTotal: MutableList<MutableList<Int>> = mutableListOf<MutableList<Int>>()

    for(i in 0..5) {


        mutableListIndex.add(i)
        println(mutableListIndex)


        mutableListTotal.add(mutableListIndex.toMutableList())
        println(mutableListTotal)

    }
}

其中给出:

[0]
[[0]]
[0, 1]
[[0], [0, 1]]
[0, 1, 2]
[[0], [0, 1], [0, 1, 2]]
[0, 1, 2, 3]
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3]]
[0, 1, 2, 3, 4]
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]
[0, 1, 2, 3, 4, 5]
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4, 5]]

非常感谢大家的及时回复和帮助

您忠诚的

于 2020-07-24T12:43:57.107 回答
0

mutableListIndex您始终传递要添加到的相同引用mutableListTotal。因此,在每个位置上,您都有相同的对象。

然后,您将一个新项目添加到您的第一个列表中,并且对它的每个引用都指向更新的列表,还有一个项目。

要获得一个独立对象,每次更新第一个引用时都不会更新,您首先需要创建 List 的副本,然后只将副本添加到您的第二个列表中。这样,对初始列表的更新将不会反映到您的第一个列表副本中。

import java.util.List.copyOf

fun main() {

    ...
        mutableListTotal.add(copyOf(mutableListIndex))
    ...
}
于 2020-07-24T12:31:46.437 回答