当前位置: 首页 > 知识库问答 >
问题:

在Android中需要列表的地方使用Kotlin的可变列表或ArrayList

姬向明
2023-03-14

我正在努力学习用Android做事情的“Kotlin原生方式”,同时既不是Kotlin、Java,也不是Android开发方面的专家。具体来说,何时使用ArrayListMutableList相比。

在我看来,应该尽可能选择MutableList。然而,如果我看一下Android的例子,他们似乎总是选择ArrayList(据我所知)。

下面是一个使用ArrayList并扩展Java的RecyclerView的工作示例的片段。适配器

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

我可以简单地编写上面的代码如下(注意MutableList)

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

总是使用MutableList而不是ArrayList真的更好吗?主要原因是什么?我上面提供的一些链接超出了我的理解范围,但在我看来,MutableList是一个更松散的实现,在未来更能改变和改进。是这样吗?


共有2个答案

柯翔
2023-03-14

区别在于:

>

  • 如果您使用ArrayList()您明确表示“我希望这是MutableListArrayList实现,并且永远不要更改为任何其他内容”。

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

    MutableListmutableListOf())的当前默认实现返回一个ArrayList。如果(不太可能)这种情况在将来发生变化(如果设计了一种新的更有效的实现),则可能会变为。。。mutableListOf():MutableList

    在这种情况下,无论您在代码中使用了什么ArrayList()这都将保持ArrayList。无论您在哪里使用mutableListOf()这将从ArrayList更改为一个名为的全新高效列表。

  • 水渊
    2023-03-14

    ArrayList是Kotlin中可变列表接口的实现:

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

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

    这个答案可能表明只要有可能就应该选择MutableList,但是ArrayList是一个MutableList。因此,如果您已经在使用ArrayList,那么真的没有理由使用MutableList,特别是因为您实际上无法直接创建它的实例(MutableList是一个接口,而不是一个类)。

    事实上,如果您查看mutableListOf()Kotlin扩展方法:

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

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

     类似资料:
    • 看起来很简单,但是,如何初始化 Kotlin 的以清空? 我可以用这种方式破解它,但我肯定有更简单的方法:

    • 我已经开始使用Kotlin作为java的替代品,并且非常喜欢它。然而,如果不跳回java领域,我就无法找到解决方案: 我有一个

    • 我有一个Java/Kotlin互操作问题。一个Kotlin不可变列表被编译成一个普通的java.util.ArrayList,它是可变的! 静态编程语言(库): Java(消费者): 如何使我的 Kotlin 类从 Java 的角度来看也是完全不可变的?

    • 我想按id分组。 结果应如下所示: 静态编程语言中最惯用的方法是什么?

    • 问题内容: 我有Java / Kotlin互操作问题。Kotlin不可变列表被编译为可变的普通java.util.ArrayList! Kotlin(图书馆): Java(消费者): 从Java的角度来看,如何也使我的Kotlin类完全不可变? 问题答案: 默认情况下,Kotlin中的所有非集合都是 编译时只读类型 ,但不是 不可变的 。请参见以下代码段: 要真正拥有一个不变的列表,请考虑Guav

    • 问题内容: 我继承了一个使用Hibernate 3.0连接到SQL Server数据库的Websphere Portal项目。 这个项目中大约有130个Hibernate表类。它们都实现了可序列化。它们均未声明serialVersionUID字段,因此Eclipse IDE对所有这些类均显示警告。 这些类是否真正需要实现Serializable? 如果是这样,是否有任何工具可以一次将生成的seri