Difference between ArrayList() and mutableListOf() in Kotlin
1 2 3
| private val repositories = mutableListOf<String>()
private val repositories = ArrayList<String>() |
两者都是可变列表,那么两个关键字mutableListOf或ArrayList的意义是什么?
或有什么主要区别?
-
mutableListOf和ArrayList都不是Kotlin中的关键字
两者之间的唯一区别是传达您的意图。
当您编写val a = mutableListOf()时,您的意思是"我想要一个可变列表,并且我并不特别在意实现"。相反,在编写val a = ArrayList()时,您是在说"我特别想要一个ArrayList"。
实际上,在当前Kotlin编译为JVM的实现中,调用mutableListOf会生成一个ArrayList,并且行为没有任何区别:一旦建立了列表,所有行为都会相同。
现在,让我们说Kotlin的未来版本将mutableListOf更改为返回不同类型的列表。
Kotlin团队很可能只有在认为新的实现在大多数用例下都能更好地工作时,才进行此更改。然后mutableListOf让您透明地使用该新列表实现,您将免费获得更好的行为。如果听起来像您的情况,请使用mutableListOf。
另一方面,也许您花了很多时间思考问题,并认为ArrayList确实最适合您的问题,并且您不想冒险陷入次优的境地。然后,您可能想要直接使用ArrayList或使用arrayListOf工厂功能(mutableListOf的ArrayList特定模拟物)。
mutableListOf< T >()是一个内联函数调用,返回一个
MutableList< T >。截至今天,mutableListOf确实返回了ArrayList的实例。
ArrayList()是构造函数调用,不能内联。
换句话说,给出:
1 2
| val a = mutableListOf<String>()
val b = ArrayList<String>() |
-
a的类型为MutableList
-
b的类型为ArrayList
在运行时,a和b都将保存ArrayList的实例。
请注意,内联与类型验证结合使用时特别有用,类型验证可以证明存在listOf,mutableListOf等。
-
因此没有区别。
-
a和b具有不同的声明类型-因此编译时有所不同。
-
可以内联为val b = arrayListOf()
如您在源代码中看到的:
1
| public inline fun < T > mutableListOf(): MutableList< T > = ArrayList() |
因此,没有区别,只是一种便捷方法。
-
我会在报价中加上"方便"。 在MutableList实际上具有不同的实现之前,提供一个与另一个核心对象做同样的事情的核心对象是令人困惑的,而且一点也不方便。 :(