如何将 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<Kolory>() // same as // val myList = mutableListOf<Kolory>()
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 可变列表集合 | 修改 MutableList 集合的 mutator 函数 )
Kotlin集合操作 ② ( MutableList 可变列表集合 | 修改 MutableList 集合的 mutator 函数 )