You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中ArrayList与MutableList的区别、适用场景及实现问询

ArrayList vs MutableList:常见疑问解答

问题背景

已知ArrayList具备MutableList的全部可变能力,且以下两段代码调用方法完全一致:

val array = arrayListOf(1)
array.add(3)

val list = mutableListOf(1)
list.add(3)

因此产生疑惑:为何需要MutableList?并提出两个问题:

  1. 分别在什么场景下使用ArrayList和MutableList?
  2. MutableList实现的是什么数据结构?是数组还是其他类型?

问题解答

1. 适用场景区分

  • 优先用MutableList的场景:
    • 编写通用代码时,比如定义函数参数、返回值或类的属性类型。举个例子,写工具函数用fun processList(list: MutableList<Int>)比ArrayList<Int>更灵活——调用方可以传入任何实现了MutableList的类(比如LinkedList),不局限于ArrayList。
    • 只需要用到可变列表的通用操作(增删改查),不需要关心底层具体实现时。这是面向接口编程的思路,能降低代码耦合度。
  • 必须用ArrayList的场景:
    • 需要用到ArrayList特有方法时,比如trimToSize()(缩减底层数组容量至实际元素数)、ensureCapacity()(提前指定数组容量避免频繁扩容),这些方法是ArrayList独有的,MutableList接口并未定义。
    • 明确需要依赖数组的随机访问性能优势,必须指定底层为数组实现时。

2. MutableList的底层结构

MutableList本身是一个接口,不是具体的数据结构。它只定义了可变列表需要具备的方法(如add()、remove()、set()等),但不规定底层用什么实现。

常见的MutableList实现类:

  • ArrayList:底层用动态数组实现,支持快速随机访问,但插入/删除中间元素效率较低。
  • LinkedList:底层用双向链表实现,插入/删除中间元素效率高,但随机访问速度慢。
  • 还有其他特殊实现,比如CopyOnWriteArrayList(线程安全实现,底层也是数组)等。

而mutableListOf()函数默认返回ArrayList实例,但返回类型是MutableList——相当于用接口类型隐藏了具体实现细节。

内容的提问来源于stack exchange,提问作者Denis Popkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:52:06