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() ❌ 否 面向抽象类型编程,更具扩展性

原始标题:Difference Between ArrayList() and mutableListOf() in Kotlin