Kotlin中的List是LinkedList吗?

and*_*est 4 java linked-list arraylist kotlin

Java中最受欢迎的列表是ArrayListLinkedList.

在科特林我看到ArrayListList.是List实际上是一个LinkedList?例如

val list = listof("1st", "2nd")
Run Code Online (Sandbox Code Playgroud)

zsm*_*b13 8

如果您使用listOf,您将获得某种List实现,使用只读List接口,包含您作为参数提供的元素.通过使用此功能,您暗示您不关心它是如何实现的.实际上,java.util.ArrayList如果您使用的是JVM ,这可能仍然存在问题.正如@Zabuza在这里的评论中指出的那样,它实际上是由一个Arrays.ArrayList类支持的,这是一个稍微不同的类.

如果你mutableListOf再次使用,你只是说你想要包含你实现的元素的东西MutableList,但实现取决于标准库.同样,这目前由an支持ArrayList,但这是一个实现细节.

如果确实需要,有几个函数可以显式返回更具体的类型.有arrayListOf,sortedSetOf,linkedMapOf,和一对夫妇更多-有不正好是一个linkedListOf,但你很可能实现它自己,如果你需要一个,不希望使用LinkedList构造函数.

如果有更改,您将更加通用listOf并且mutableListOf可以在以后在平台之间共享代码 - 因为这些是标准库的一部分,它们可以ArrayList在JVM上返回,但是如果您编译为JavaScript或Native ,则可以返回不同的平台特定实现.


use*_*612 7

它既不是 aLinkedList也不是ArrayList。基于源代码

public fun <T> listOf(element: T): List<T> = java.util.Collections.singletonList(element)
Run Code Online (Sandbox Code Playgroud)

或者,对于多个元素:

public fun <T> listOf(vararg elements: T): List<T> = if (elements.size > 0) elements.asList() else emptyList()
Run Code Online (Sandbox Code Playgroud)

最后一段代码调用ArraysUtilJVM,后者又调用Arrays.asList(),后者返回一个Arrays.ArrayList实例。但是,这是一个实现细节,将来可能会发生变化。重要的是生成的对象实现了List接口(即,它是不可变的)。

  • ...这不是通常所说的“ArrayList”(*动态数组*)。它是数组的固定大小包装器。 (2认同)

ir2*_*pid 5

刚刚尝试打印类型,

* 对于一个元素来说,它是一个 SingletonList

val list = listOf("a")
println(list.javaClass)
Run Code Online (Sandbox Code Playgroud)

输出:类 java.util.Collections$SingletonList

* 对于多个元素,它是一个 ArrayList

val list = listOf("a", "b", "c")
println(list.javaClass)
Run Code Online (Sandbox Code Playgroud)

输出:类 java.util.Arrays$ArrayList