Kotlin中的ArrayList <String>()和mutableListOf <String>()之间的区别
private val repositories = mutableListOf<String>() private val repositories = ArrayList<String>()
两者都是可变列表,那么两个关键字mutableListOf
或ArrayList
什么关系?
还是有什么重大的区别?
两者之间的唯一区别是传达你的意图。
当你写val a = mutableListOf(1,2,3)
,你会说“我想要一个可变列表,而且我并不特别关心实现”。 当你写,而是, val a = ArrayList(1,2,3)
,你说“我特别想要一个ArrayList
”。
实际上,在Kotlin编译到JVM的当前实现中,调用mutableListOf
将产生一个ArrayList
,行为没有区别:一旦列表被建立,所有东西都会表现相同。
现在,让我们说Kotlin 1.2改变mutableListOf
返回一个不同类型的列表。
可能性不大,他们会做出这样的改变,因为他们认为它对大多数用例来说效果更好。 然后, mutableListOf
会让你透明地使用这个新的列表实现,并且你可以免费获得更好的行为。 如果听起来像你的情况,去mutableListOf
。
另一方面,也许你花了一些时间来思考你的问题,并且认为ArrayList
确实是最适合你的问题,而且你不想冒着被转移到不理想的风险。 那么你可能要直接调用ArrayList
。
mutableListOf<T>()
是一个返回MutableList<T>
的内联函数调用。 截至今天, mutableListOf
确实返回ArrayList
一个实例。
ArrayList<String>()
是一个构造函数调用,不能内联。
换句话说就是给出
val a = mutableListOf<String>() val b = ArrayList<String>()
-
a
是MutableList<String>
类型 -
b
的类型是ArrayList<String>
在运行时, a
和b
将保存一个ArrayList
的实例。
请注意,内联特别有用时,与类型的listOf
,证明存在listOf
, mutableListOf
和类似的。
正如你所看到的:
public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()
所以,没有什么区别,只是一个方便的方法。