Kotlin中如何正确向列表的列表添加列表?解决引用重复问题
Kotlin 列表的列表添加元素问题解决
问题原因
你这段代码的核心问题是全程复用了同一个myList可变列表实例。每次外层循环只是往这个列表里追加元素,然后把该实例的引用直接塞进listOfList中。这意味着listOfList里的三个元素本质上都是指向同一个列表对象,最后打印时自然会显示这个列表最终的状态——也就是三次添加元素后的完整内容。
正确实现方式
如果你想实现预期的输出(每次外层循环后保存当前myList的状态,后续继续累加元素),可以在添加时存入当前列表的副本:
val myList = mutableListOf<Int>() val listOfList = mutableListOf<List<Int>>() for (i in 0..2) { for (j in 0..2) { myList.add(j) } // 添加当前列表的不可变副本,而非原引用 listOfList.add(myList.toList()) } println(listOfList)
运行后输出就是你预期的:
[[0, 1, 2], [0, 1, 2, 0, 1, 2], [0, 1, 2, 0, 1, 2, 0, 1, 2]]
如果你的需求是每次外层循环生成独立的小列表(即输出[[0,1,2],[0,1,2],[0,1,2]]),则可以每次外层循环新建一个myList实例:
val listOfList = mutableListOf<List<Int>>() for (i in 0..2) { // 每次外层循环创建新的可变列表 val myList = mutableListOf<Int>() for (j in 0..2) { myList.add(j) } listOfList.add(myList) } println(listOfList)
内容的提问来源于stack exchange,提问作者Tayeb Ahmad Omer
相关产品推荐
相关产品推荐

