private val repositories = mutableListOf<String>()
private val repositories = ArrayList<String>()
两者都是可变列表,那么使用mutableListOf
或者ArrayList
这两个关键字有何意义呢?
还是说它们之间存在重大区别?
private val repositories = mutableListOf<String>()
private val repositories = ArrayList<String>()
两者都是可变列表,那么使用mutableListOf
或者ArrayList
这两个关键字有何意义呢?
还是说它们之间存在重大区别?
val a = mutableListOf()
时,你的意思是“我想要一个可变列表,但对具体实现并不特别关心”。而当你写下val a = ArrayList()
时,你的意思是“我明确想要一个ArrayList
”。mutableListOf
会生成一个ArrayList
,在行为上没有任何区别:一旦列表建立,所有的行为都是相同的。mutableListOf
返回了一个不同类型的列表。mutableListOf
将会透明地使用新的列表实现,并且你会免费获得更好的行为。如果这符合你的情况,请选择mutableListOf
。ArrayList
真的是最适合你的问题,你不想冒险被移到次优解。那么你可能想要直接使用ArrayList
,或者使用arrayListOf
工厂函数(与mutableListOf
类似,但是用于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
、mutableListOf
等方法的存在。
a
和 b
声明的类型不同 - 因此在编译时存在差异。 - miensolval b = arrayListOf<String>()
内联。 - Vlad
mutableListOf
和ArrayList
在Kotlin中都不是关键字。 - Ilya