【问题标题】:How does Kotlin store the data for a list?Kotlin 如何存储列表的数据?
【发布时间】:2021-08-05 13:18:39
【问题描述】:

我想知道 Kotlin 如何将数据存储在列表中。我已经阅读了函数listOf和接口List的源代码,但是我一直无法找到数据存储在哪里。例如val list = listOf(1,2,3)。这三个数字是用什么存储方式存储的?

感谢您的阅读。

【问题讨论】:

  • 这取决于具体的List 实现。 Kotlin 中对listOf 的调用导致ArrayList 实例,这是Kotlin 和Java 中最典型的List 实现。 ArrayList 位于java.util.Arrays,请随意浏览其源代码。
  • 正如 Nikolai 所说,List 是一个接口,旨在允许许多不同类型的实现。许多使用引用数组,但其他使用链表或树,或者是更复杂数据结构(例如有序集或树)的视图。您甚至可以编写一个将其信息存储在文件或网络中的软件!当然,每一个都对性能特征、内存使用等有影响——但对于创建它的人来说,这些都是问题,通常编码使用列表应该能够在不做任何假设的情况下使用任何实现

标签: kotlin storage


【解决方案1】:

如果遵循调用链,JVM 上的listOf(vararg elements: T) 调用Arrays.asList(elements),如下所示:

    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

这不是Java常用的ArrayList,而是一个同名的私有类。但就像公共 ArrayList 一样,项目存储在支持对象数组中。在这种情况下,varargObject 数组直接用作后备数组,因此没有多余的复制或分配。源码可以查看here

【讨论】:

  • 非常感谢。我忘了kotlin代码是翻译成java的,我不知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多