private val repositories = mutableListOf<String>()
private val repositories = ArrayList<String>()
Run Code Online (Sandbox Code Playgroud)
两者都是可变的列表,那么什么是两个关键字的点mutableListOf或ArrayList?
或者有什么重大区别?
pdp*_*dpi 97
两者之间的唯一区别是沟通你的意图.
当你写作时val a = mutableListOf(),你会说"我想要一个可变列表,我并不特别关心实现".相反,当你写作时,val a = ArrayList()你会说"我特别想要一个ArrayList".
在实践中,在Kotlin编译到JVM的当前实现中,调用mutableListOf将产生一个ArrayList,并且行为没有区别:一旦构建了列表,一切都将表现相同.
现在,让我们说Kotlin的未来版本将更mutableListOf改为返回不同类型的列表.
更糟糕的是,如果他们认为新的实施对大多数用例来说效果更好,那么Kotlin团队只会做出改变.mutableListOf然后,您可以透明地使用新的列表实现,并且您可以免费获得更好的行为.一起去的mutableListOf,如果这听起来像你的情况.
另一方面,也许你花了很多时间考虑你的问题,并认为这ArrayList 真的是最适合你的问题,而且你不想冒险被转移到次优的东西.那么你可能想要ArrayList直接使用,或者使用arrayListOf工厂功能(ArrayList特定的模拟mutableListOf).
mie*_*sol 19
这mutableListOf<T>()是一个返回的内联函数调用MutableList<T>.
截至今天,mutableListOf它确实返回了一个实例ArrayList.
这ArrayList<String>()是一个构造函数调用,无法内联.
换句话说
val a = mutableListOf<String>()
val b = ArrayList<String>()
Run Code Online (Sandbox Code Playgroud)
a 是类型的 MutableList<String>b 是类型的 ArrayList<String>在运行时都a和b将举行的一个实例ArrayList.
请注意,当与混合时内联是特别有用的类型物化这证明的存在listOf,mutableListOf和类似物.
小智 15
在幕后,mutableListOf() 和 arrayListOf() 都创建了 ArrayList 的实例。ArrayList 是一个恰好实现了 MutableList 接口的类。
唯一的区别是 arrayListOf() 将 ArrayList 作为实际的 ArrayList 返回。mutableListOf() 返回一个 MutableList,因此实际的 ArrayList 被“伪装”为 MutableList 接口所描述的部分。
实际上,区别在于 ArrayList 有一些不属于 MutableList 接口的方法(trimToSize 和 EnsureCapacity)。
从哲学上讲,区别在于 MutableList 只关心返回对象的行为。它只是返回“类似于 MutableList 的东西”。ArrayList关心对象的“结构”。它允许您直接操作对象分配的内存(trimToSize)。
经验法则是,您应该更喜欢事物的接口版本(mutableListOf()),除非您确实有理由关心底层结构的确切细节。
或者,换句话说,如果您不知道想要哪个,请先选择 mutableListOf。
正如您在消息来源中看到的:
public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()
Run Code Online (Sandbox Code Playgroud)
所以,没有区别,只是一种方便的方法.
| 归档时间: |
|
| 查看次数: |
22429 次 |
| 最近记录: |