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

Difference between ArrayList() and mutableListOf() in Kotlin

1
2
3
private val repositories = mutableListOf<String>()

private val repositories = ArrayList<String>()

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

或有什么主要区别?


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

当您编写val a = mutableListOf()时,您的意思是"我想要一个可变列表,并且我并不特别在意实现"。相反,在编写val a = ArrayList()时,您是在说"我特别想要一个ArrayList"。

实际上,在当前Kotlin编译为JVM的实现中,调用mutableListOf会生成一个ArrayList,并且行为没有任何区别:一旦建立了列表,所有行为都会相同。

现在,让我们说Kotlin的未来版本将mutableListOf更改为返回不同类型的列表。

Kotlin团队很可能只有在认为新的实现在大多数用例下都能更好地工作时,才进行此更改。然后mutableListOf让您透明地使用该新列表实现,您将免费获得更好的行为。如果听起来像您的情况,请使用mutableListOf

另一方面,也许您花了很多时间思考问题,并认为ArrayList确实最适合您的问题,并且您不想冒险陷入次优的境地。然后,您可能想要直接使用ArrayList或使用arrayListOf工厂功能(mutableListOfArrayList特定模拟物)。


mutableListOf< T >()是一个内联函数调用,返回一个
MutableList< T >。截至今天,mutableListOf确实返回了ArrayList的实例。

ArrayList()是构造函数调用,不能内联。

换句话说,给出:

1
2
 val a = mutableListOf<String>()
 val b = ArrayList<String>()
  • a的类型为MutableList
  • b的类型为ArrayList

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

请注意,内联与类型验证结合使用时特别有用,类型验证可以证明存在listOfmutableListOf等。


如您在源代码中看到的:

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

因此,没有区别,只是一种便捷方法。