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


241

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

我可以用这种方式来破解它,但是我敢肯定有一些更容易的方法:

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

Answers:


436

您可以简单地写:

val mutableList = mutableListOf<Kolory>()

这是最惯用的方式。

替代方法是

val mutableList : MutableList<Kolory> = arrayListOf()

要么

val mutableList : MutableList<Kolory> = ArrayList()

这利用了这样的事实:像Java这样ArrayList的类型MutableList通过编译器技巧隐式地实现了该类型。


您需要导入什么吗?当我在当前项目中编写此代码时,我得到了未解析的引用arrayListOf,如果尝试使用mutableListOf,则得到相同的引用
vextorspace

您的类路径中有stdlib吗?
Kirill Rakhman

我只需要将build.gradle中的kotlin_version标志切换回1.1.0而不是1.1.1
vextorspace

1
@androiddeveloper那是因为kotlin.collections.List没有 java.utils.List。Kotlin具有映射某些内置Java类型的机制。请参考kotlinlang.org/docs/reference/java-interop.html#mapped-types和类似的SO问题。评论部分不适用于对此进行详细讨论。
Kirill Rakhman

1
@Mohanakrrishna是的,这些函数支持传递参数。
Kirill Rakhman

17

取决于列表类型的各种形式,用于数组列表:

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

对于LinkedList:

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

对于其他列表类型,如果直接构造它们,将被认为是可变的:

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

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

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

val myList: List<Kolory> = ArrayList()

如果我知道新MutableList的大小怎么办?对于ArrayList,我可以执行:ArrayList(24),例如,如果我认为24是一个好的开始,那么它可能不需要的更多。
Android开发人员

@androiddeveloper查看列表构造函数的文档或底层列表的Java API,您将看到所需选项。
杰森·米纳德

你忘了mutableListOf。正确的是:val myList = arrayListOf<Kolory>() // same as // val myList = mutableListOf<Kolory>()
user924

10

我喜欢以下内容:

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))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.