Kotlin 中的列表是链接列表吗?



Java 中最受欢迎的列表是ArrayListLinkedList

在 Kotlin 中,我看到了ArrayListList.List真的是LinkedList吗?例如

val list = listof("1st", "2nd")

如果你使用listOf,你会得到某种List实现,带有只读List接口,包含你作为参数提供的元素。通过使用这个函数,你暗示你不关心它是如何实现的。实际上,如果您在 JVM 上,这可能仍然是一个幕后java.util.ArrayList正如@Zabuza在这里的评论中指出的那样,它实际上得到了一个Arrays.ArrayList的支持,这是一个略有不同的类。

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

有几个函数显式返回更具体的类型(如果需要的话(。有arrayListOfsortedSetOflinkedMapOf,还有更多 - 没有linkedListOf,但如果你需要一个并且不想使用LinkedList构造函数,你可以自己实现它。

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

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

public fun <T> listOf(element: T): List<T> = java.util.Collections.singletonList(element)

或者,对于多个元素:

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

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

刚刚尝试打印类型,

* 对于一个元素,它是一个单调列表

val list = listOf("a")
println(list.javaClass)

输出:类 java.util.Collections$SingletonList

* 对于多个元素,它是一个数组列表

val list = listOf("a", "b", "c")
println(list.javaClass)

输出: class java.util.Arrays$ArrayList

kotlin 中的列表不是 LinkedList

根据官方文档 - Kotlin 列表类型是一个 提供只读操作(如大小、获取等(的接口。 就像在Java中一样,它继承自Collection,而Collection又继承了 从可迭代。

listOf((是来自标准 Kotlin 库的用于创建不可变列表的方法。listOf((方法是使用 kotlin 中的数组列表实现的。

点击此官方文档链接了解更多详情。

如果跟踪源代码

收藏.kt

/**
* Returns a new read-only list of given elements.  The returned list is serializable (JVM).
* @sample samples.collections.Collections.Lists.readOnlyList
*/
public fun <T> listOf(vararg elements: T): List<T> = if (elements.size > 0) elements.asList() else emptyList()

然后_Arrays.kt

/**
* Returns a [List] that wraps the original array.
*/
public expect fun <T> Array<out T>.asList(): List<T>

然后你会发现它是 Kotlin 的数组,被 Kotlin 的 List 接口包裹起来,我们称之为"Kotlin 的数组列表">

"Kotlin's Array List"可能与Java的数组相同,也可能不同 - 我猜它是在Java(JVM(或Android环境(Dalvik或ART(中。

相关内容

  • 没有找到相关文章

最新更新