Kotlin中的ArrayList <String>()和mutableListOf <String>()之间的区别

private val repositories = mutableListOf<String>() private val repositories = ArrayList<String>() 

两者都是可变列表,那么两个关键字mutableListOfArrayList什么关系?

还是有什么重大的区别?

两者之间的唯一区别是传达你的意图。

当你写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>() 
  • aMutableList<String>类型
  • b的类型是ArrayList<String>

在运行时, ab将保存一个ArrayList的实例。

请注意,内联特别有用时,与类型的listOf ,证明存在listOfmutableListOf和类似的。

正如你所看到的:

 public inline fun <T> mutableListOf(): MutableList<T> = ArrayList() 

所以,没有什么区别,只是一个方便的方法。