如何将 Kotlin 的 MutableList 初始化为空 MutableList?

Posted

技术标签:

【中文标题】如何将 Kotlin 的 MutableList 初始化为空 MutableList?【英文标题】:How do I initialize Kotlin's MutableList to empty MutableList? 【发布时间】:2016-01-21 14:30:40 【问题描述】:

看起来很简单,但是,如何将 Kotlin 的 MutableList 初始化为空 MutableList

我可以通过这种方式破解它,但我确信有一些更容易获得的东西:

var pusta: List<Kolory> = emptyList()
var cos: MutableList<Kolory> = pusta.toArrayList()

【问题讨论】:

【参考方案1】:

使用故意看起来像构造函数的 Kotlin 集合的 MutableList() 函数是绝对有效的。这个函数通常非常有用,因为它还可以使用一个初始化函数,该函数预填充(非空)列表的所有值。

val emptyListOfTypeUnit = MutableList(0) 

val emptyListOfTypeInt = MutableList(0)  0 
val verboseEmptyListOfTypeInt = MutableList<Int>(0)  0 

val emptyListOfTypeString = MutableList(0)  "" 
val verboseEmptyListOfTypeString = MutableList<String>(0)  "" 

val emptyListOfTypeKolory = MutableList(0)  Kolory() 
val verboseEmptyListOfTypeKolory = MutableList<Kolory>(0)  Kolory() 

免责声明:我是在面向 Kotlin 开发人员的 Jetbrains Academy 课程中了解到这一点的,遗憾的是该课程并未公开。因此,我无法在此处链接参考。对不起。

【讨论】:

【参考方案2】:

在 kotlin 中创建可空字符串的可变列表

val systemUsers: MutableList<String?> = mutableListOf()

【讨论】:

【参考方案3】:

根据列表类型的不同形式,用于数组列表:

val myList = mutableListOf<Kolory>() 
// or more specifically use the helper for a specific list type
val myList = arrayListOf<Kolory>()

对于链表:

val myList = linkedListOf<Kolory>()
// same as
val myList: MutableList<Kolory> = linkedListOf()

对于其他列表类型,如果您直接构造它们,将假定它们是可变的:

val myList = ArrayList<Kolory>()
// or
val myList = LinkedList<Kolory>()

这适用于任何实现List 接口的东西(即其他集合库)。

如果列表已经是可变的,则无需重复左侧的类型。或者仅当您想将它们视为只读时,例如:

val myList: List<Kolory> = ArrayList()

【讨论】:

如果我知道新的 MutableList 的大小怎么办?对于 ArrayList,我可以这样做:ArrayList(24),例如,如果我认为 24​​ 对它来说是一个好的开始,那么它可能不需要更多。 @androiddeveloper 查看列表构造函数的文档或底层列表的 Java API,您将看到所需的选项。 你忘了mutableListOf。正确的是:val myList = arrayListOf&lt;Kolory&gt;() // same as // val myList = mutableListOf&lt;Kolory&gt;() linkedListOf 用于早期版本的 Kotlin 我也相信 Kotlin 不再有 LinkedList【参考方案4】:

你可以简单地写:

val mutableList = mutableListOf<Kolory>()

这是最惯用的方式。

替代方法是

val mutableList : MutableList<Kolory> = arrayListOf()

val mutableList : MutableList<Kolory> = ArrayList()

这是利用 ArrayList 等 java 类型通过编译器技巧隐式实现类型 MutableList 的事实。

【讨论】:

你需要导入什么吗?当我在我当前的项目中写这个时,如果我尝试 mutableListOf,我会得到未解析的引用 arrayListOf 和相同 你的类路径中有stdlib吗? 我只需要将 build.gradle 中的 kotlin_version 标志切换回 1.1.0 而不是 1.1.1 @androiddeveloper 那是因为kotlin.collections.List不是 java.utils.List。 Kotlin 有一种机制来映射一些内置的 java 类型。请参阅kotlinlang.org/docs/reference/java-interop.html#mapped-types 和类似的 SO 问题。评论部分不适合详细讨论。 @Mohanakrrishna 是的,这些函数支持传递参数。【参考方案5】:

我喜欢下面的:

var book: MutableList<Books> = mutableListOf()

/** 返回具有给定元素的新 [MutableList]。 */

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

【讨论】:

以上是关于如何将 Kotlin 的 MutableList 初始化为空 MutableList?的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串从共享首选项转换为 MutableList<LatLng> 对以在 kotlin 中绘制折线?

如何通过 kotlin 中的意图传递对象的 MutableList

将一个 mutableList 从活动 A 传递到 Kotlin 中的活动 B。

kotlin MutableList的遍历

Kotlin集合操作 ② ( MutableList 可变列表集合 | 修改 MutableList 集合的 mutator 函数 )

Kotlin集合操作 ② ( MutableList 可变列表集合 | 修改 MutableList 集合的 mutator 函数 )