使用 listOf 与 arrayListOf

osh*_*hai 3 kotlin

在 Kotlin 代码中使用listOf()或是否有任何最佳实践arrayListOf()?它们实际上都返回相同的实现,我理解 listOf 更好,因为它与特定实现无关。 是它的文档吗?
它是否记录在语言风格的任何地方?
是否还有其他原因需要使用每一种?

s1m*_*nw1 9

一个显着且重要的区别是,它listOf为您提供只读, ListarrayListOf为您提供MutableList. 尽可能使用只读数据结构绝对是首选。

val l1 = listOf(1)
l1.add(2) //not possible

val l2 = arrayListOf(2)
l2.add(1) //ok
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您不完全依赖类型推断,您也可以将 ArrayList 的变量设为只读:

val l3: List<Int> = arrayListOf(2)
l3.add(1) //not possible anymore
Run Code Online (Sandbox Code Playgroud)

不使用的要点arrayListOf是你想依靠库来选择实际的实现。到目前为止,这恰好是ArrayList在未来版本中可能会改变的。例如,如果 Kotlin 决定添加一个更强大的向后兼容版本的 ArrayList,他们可以更改实现并且您的代码将继续工作(以改进的方式)。另一方面,如果您想依赖 ArrayList (via arrayListOf),您可能有一个具体的场景,只有这个实现是可以接受的。