7

我正在尝试学习在 Android 中做事的“Kotlin 原生方式”,同时我既不是 Kotlin、Java 也不是 Android 开发方面的专家。具体来说,何时使用ArrayListvsMutableList

在我看来,MutableList应该尽可能选择。然而,如果我查看 Android 示例,他们似乎总是选择ArrayList(据我目前所发现的)。

下面是一个使用ArrayList和扩展 Java 的工作示例的片段RecyclerView.Adapter

class PersonListAdapter(private val list: ArrayList<Person>,
                        private val context: Context) : RecyclerView.Adapter<PersonListAdapter.ViewHolder>() {

问题1)

即使我从 Android 的 Java 代码中借用,我是否可以简单地将上面的代码编写如下(注意MutableList<>而不是)?ArrayList<>

class PersonListAdapter(private val list: MutableList<Person>,
                        private val context: Context) : RecyclerView.Adapter<PersonListAdapter.ViewHolder>() {

问题2)

MutableList总是使用over真的更好ArrayList吗?主要原因是什么?我在上面提供的一些链接超出了我的想象,但在我看来,这MutableList是一个更松散的实现,未来更有能力改变和改进。那正确吗?

4

2 回答 2

12

ArrayList 是 Kotlin 中 MutableList 接口的实现:

class ArrayList<E> : MutableList<E>, RandomAccess

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-array-list/index.html

该答案可能表明应尽可能选择 MutableList,但 ArrayListMutableList。因此,如果您已经在使用 ArrayList,那么确实没有理由改用 MutableList,尤其是因为您实际上不能直接创建它的实例(MutableList 是一个接口,而不是一个类)。

事实上,如果你看一下mutableListOf()Kotlin 扩展方法:

public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()

您可以看到它只返回您提供的元素的 ArrayList。

于 2018-11-09T01:30:31.280 回答
11

区别在于:

  • 如果您使用ArrayList(),则明确表示“我希望这是一种ArrayList实现,MutableList并且永远不会更改为其他任何东西”。

  • 如果你使用mutableListOf()它就像说“给我默认MutableList实现”。

MutableList( )的当前默认实现mutableListOf()返回一个ArrayList. 如果将来发生这种情况(不太可能)发生变化(如果设计了一个新的更高效的实现),这可能会更改为...mutableListOf(): MutableList<T> = SomeNewMoreEfficientList().

在这种情况下,您在代码中使用的任何地方ArrayList()都会保留ArrayList. 无论您在哪里使用,它都会mutableListOf()从.ArrayListSomeNewMoreEfficientList

于 2019-04-06T02:22:39.883 回答