如何在Kotlin中初始化List <T>?


Answers:



15

伊利亚(Ilya)加马里奥蒂(gmariotti)提出的正确答案都是正确的。但是,有些替代方案会在评论中散布开来,而根本没有提及。

该答案包括已经给出的答案的摘要,说明和一些其他选择。

不可变的清单(List

不可变或只读列表是不能添加或删除元素的列表。

  • 正如Ilya指出的那样,listOf()通常会做您想要的。这将创建一个不可变列表,类似于Arrays.asListJava中的列表。
  • 正如frogcoder在评论中指出的那样,emptyList()执行相同的操作,但自然会返回一个空列表。
  • listOfNotNull()返回一个不包含所有null元素的不可变列表。

可变列表(MutableList

可变列表可以添加或删除元素。

  • gmariotti建议使用mutableListOf(),这通常是您需要在列表中添加或删除元素时想要的。
  • Greg T提供了替代方案arrayListOf()。这将创建一个可变的ArrayList。如果您确实想要ArrayList实现,请在上方使用mutableListOf()
  • 对于其他List没有便利功能的实现,可以将它们初始化为val list = LinkedList<String>()。那只是通过调用对象的构造函数来创建对象。仅当您确实想要例如LinkedList实现时才使用此功能。

13

只是为了添加更多信息,Kotlin提供了不可变的功能ListMutableList并且可以使用listOf和初始化mutableListOf。如果你更感兴趣的是科特林提供关于集合,你可以去官方参考文档集合


7

让我解释一些用例:让我们创建一个带有初始化项的不可变(不可更改)列表:

val myList = listOf("one" , "two" , "three")

让我们创建一个带有初始化字段的可变(可变)列表:

val myList = mutableListOf("one" , "two" , "three")

让我们声明一个不可变(不可更改),然后实例化它:

lateinit var myList : List<String>
// and then in the code :
myList = listOf("one" , "two" , "three")

最后,为每个添加一些额外的项目:

val myList = listOf("one" , "two" , "three")
myList.add() //Unresolved reference : add, no add method here as it is non mutable 

val myMutableList = mutableListOf("one" , "two" , "three")
myMutableList.add("four") // it's ok 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.