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

Ali*_*ani 58 list kotlin

我看到Kotlin有一个List<out E>集合但我不知道如何初始化它.在Java中,我可以写:

List<String> geeks = Arrays.asList("Fowler", "Beck", "Evans");
Run Code Online (Sandbox Code Playgroud)

我如何在Kotlin中实现同样的目标?

Ily*_*lya 95

listOf 救援的顶级功能:

val geeks = listOf("Fowler", "Beck", "Evans")
Run Code Online (Sandbox Code Playgroud)

  • 在没有任何参数的情况下调用[listOf](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/list-of.html)会获得一个空列表,或者只调用[emptyList](https:/ /kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/empty-list.html)使其更具可读性. (8认同)
  • 还有[arrayListOf](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/array-list-of.html) (4认同)
  • @IgorGanapolsky 返回的类型是只读的“List&lt;T&gt;”,因此不应假设它是可变的。 (2认同)

gma*_*tti 11

只需添加更多的信息,科特林提供不可变的List,并MutableList可以与被初始化listOfmutableListOf.如果你更感兴趣的是科特林提供关于集合,你可以去官方参考文档的集合.


Mag*_*lex 8

Ilyagmariotti的赞成回答都是好的和正确的.然而,一些备选方案在评论中展开,有些则根本没有提及.

这个答案包括已经给出的摘要,以及澄清和其他几个备选方案.

不可变列表(List)

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

可变列表(MutableList)

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

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


小智 8

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

val myList = listOf("one" , "two" , "three")
Run Code Online (Sandbox Code Playgroud)

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

val myList = mutableListOf("one" , "two" , "three")
Run Code Online (Sandbox Code Playgroud)

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

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

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

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 
Run Code Online (Sandbox Code Playgroud)


Nik*_*aye 6

这样就可以在Kotlin中初始化List了

val alphabates : List<String> = listOf("a", "b", "c")
Run Code Online (Sandbox Code Playgroud)