如何将MutableList添加到其他MutableList-Kotlin



下午好,亲爱的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]]

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

有人能帮我解释一下我的错误吗?

您忠实的

根据上面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]]

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

您忠实的

您总是传入要添加到mutableListTotal中的mutableListIndex的同一引用。所以在每个位置上都有相同的物体。

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

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

import java.util.List.copyOf
fun main() {
...
mutableListTotal.add(copyOf(mutableListIndex))
...
}

相关内容

  • 没有找到相关文章

最新更新