android KotlinList〈List< String>>在示例化时创建1个空元素

s3fp2yjn  于 2023-02-06  发布在  Android
关注(0)|答案(2)|浏览(139)

解决算法任务,来到一个有趣的情况,以前我没有注意。
以下是示例:

val testList1 = mutableListOf<String>()

    testList1.add("f")
    testList1.add("n")

    Toast.makeText(this, testList1.size.toString(), Toast.LENGTH_SHORT).show()

在这段代码中,我的toast将返回大小2。这是正常的,也是意料之中的。但让我们举个例子:

val testList2 = mutableListOf(mutableListOf<String>())

    testList2.add(mutableListOf("sf", "fgs"))
    testList2.add(mutableListOf("sw", "fgg"))

    Toast.makeText(this, testList2.size.toString(), Toast.LENGTH_SHORT).show()

这里toast显示size = 3,尽管我添加了2个元素(2个列表),所以当示例化它时,添加1个emptyList作为第一个元素。
解决这个问题不是什么大问题,我们可以只是:
变量finalList = testList2.remove如果{它是空的()}
但我很好奇为什么会发生这种情况。也有什么好的方法来避免它。想知道一点点,如果可能的话

0ejtzxu1

0ejtzxu11#

testList2包含3个对象并不奇怪。testList2是用一个初始空列表构造的。

val testList2 = mutableListOf(mutableListOf<String>())

// using
public fun <T> mutableListOf(vararg elements: T): MutableList<T> =
    if (elements.size == 0) ArrayList() else ArrayList(ArrayAsCollection(elements, isVarargs = true))

在这里,您可以通过这些代码定义一个空的可变列表。

val testList: MutableList<MutableList<String>> = mutableListOf()

// or
val testList = mutableListOf<MutableList<String>>()

// using
public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()
pwuypxnk

pwuypxnk2#

传递给mutableListOf函数的是它返回的列表的初始内容,因为在mutableListOf()的外部调用中嵌套了mutableListOf()的调用,所以创建的列表的初始值是另一个MutableList。
如果希望列表从空开始,则在调用mutableListOf()时不要在()中放入任何内容。
如果你用这种方式构造你的列表,你需要指定列表的类型,因为它没有一个参数来推断类型。
或者

val testList2 = mutableListOf<MutableList<String>>()

val testList2: MutableList<MutableList<String>> = mutableListOf()

相关问题