1. 概述
在 Kotlin 中创建可变列表(mutable list)时,我们通常有两种方式可以选择。虽然最终它们可能都返回了相同的实现类,但在使用上仍有一些细微差别值得我们注意。
本文将带你快速了解 ArrayList()
和 mutableListOf()
的使用方式及其背后的实现差异。
2. 在 Kotlin 中创建可变列表
2.1. ArrayList<T>()
我们可以直接通过构造函数创建一个 ArrayList
实例:
val arrayList = ArrayList<String>()
arrayList.add("Kotlin")
arrayList.add("Java")
✅ 这是 Kotlin 对 Java 动态数组的封装实现。
⚠️ 如果你明确知道自己需要的是 ArrayList
类型,这种方式更直观、更有控制感。
2.2. mutableListOf<T>()
另一种创建可变列表的方式是使用 Kotlin 提供的标准库函数:
val mutableList = mutableListOf<String>()
mutableList.add("Kotlin")
mutableList.add("Java")
我们来看一下 Kotlin 1.4.10 版本中该函数的源码实现:
/**
* Returns an empty new [MutableList].
* @sample samples.collections.Collections.Lists.emptyMutableList
*/
@SinceKotlin("1.1")
@kotlin.internal.InlineOnly
public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()
❌ 不要被“抽象”吓到——其实它内部就是直接返回了一个 ArrayList()
实例。
✅ 所以说,这个方法把底层实现细节隐藏了起来,开发者只需关心“我需要一个可变列表”,而不必纠结具体是哪种实现。
3. 总结
在这篇文章中我们对比了两种创建可变列表的方式:
- 使用
ArrayList()
是显式地指定我们要创建一个ArrayList
实例; - 使用
mutableListOf()
则是一种更抽象的方式,我们只要求获得一个可变列表,并不关心具体实现。
💡 当前版本下(Kotlin 1.4+),两者本质是一样的:都会创建 ArrayList
实例。
但如果你追求代码风格统一或希望面向接口编程(而不是具体实现),推荐优先使用 mutableListOf()
。
🎯 如果你需要明确使用 ArrayList
的某些特性(比如序列化行为等),那直接用 ArrayList()
更稳妥。
方式 | 是否暴露实现 | 推荐场景 |
---|---|---|
ArrayList() |
✅ 是 | 明确需要 ArrayList 行为 |
mutableListOf() |
❌ 否 | 面向抽象类型编程,更具扩展性 |