Kotlin 列表和数组

yon*_*oni 3 kotlin

刚开始使用 Kotlin,我喜欢它,但是……我无法理解这种语言中的 Lists 和 Arrys。我对编程并不陌生,不需要解释什么是数组。我不明白的是。

  1. 列表和数组有什么区别?它们看起来非常相似,您都使用 [index] 访问它们并以几乎相同的方式使用它们。如果列表是不可变的,那么它们就更加相同,所以......有什么区别?假设列表不是链表,它们的访问时间都是 O(1)。

  2. 如果我使用列表;可变和不可变有什么区别?什么时候可以编辑内容?什么时候可以改变长度?

  3. 同一事物似乎有许多重叠且令人困惑的名称。List、ListOf、ArrayList、IntArray、intArray...
    有人可以列出所有这些列表,并在您使用每一个时给出某种经验法则。具体来说,我发现不可变空列表的概念非常令人困惑。那到底是用来做什么的?

  4. 你如何初始化这些东西?

抱歉问了这么长的问题,

谢谢。

Fil*_*tic 6

  1. 第一个区别是,List接口是描述一些常见的列表操作,而接口Array是类。从内存的角度来看,Array是内存中的连续区域,其大小不会改变,这就是为什么创建后不能更改其大小Array,但可以更改其元素,另一方面List可以通过不同的方式实现,意思是内存结构可以不同,最常见的实现是ArrayList使用数组来存储元素,一旦数组被填充,它就会被更大的数组改变,旧数组的内容被添加到新数组中,另一种实现是,LinkedList你有节点指向到列表中的下一个元素。从性能角度来看Array,它总是比任何实现都快List,但它也受到更多限制。
  2. List和之间的区别MutableList在于,当您使用时MutableList,您可以更改该列表的元素(从中添加或删除元素),而当使用 immutable 时,List您不能从中添加或删除元素。这两个列表都允许您更改这些元素的属性。

  3. 将这个答案分为三个答案:

    • List是扩展Collection接口的接口,提供基本的常见列表操作,MutableList扩展List接口以及MutableCollection添加更改该列表元素所需的方法的接口,listOf是创建List并用给定参数填充它的函数,通过使用listOf我们不需要指定哪个将使用的实现List,例如在 JVM 上Listjava.util.Arrays.ArrayList(与 ) 不同java.util.ArrayList,而在 JavaScript 方面,它可能由Array(与此声明不同,因为我从未在 JS 中使用过 Kotlin)
    • ArrayListtypealias to java.util.ArrayList,没有什么特别的,它是 JavaList接口的实现,MutableList由 JVM 上的这个实现支持。
    • Array相当于Java的数组,也没有什么特别之处,IntArray为了弥补kotlin中原始类型的不足,使用了其他原始数组公司,与Java中Array<Int>相同,而与. 相同的逻辑适用于所有其他变体。使用原始类型可以获得更好的性能,但在现代计算机上的大多数情况下,差异可以忽略不计,如果您确实有很多数据,则应该尽可能使用原始类型。Integer[]IntArrayint[]

您可以在kotlin 存储库上查看所有集合层次结构

  1. 使用内置 Kotlin 函数,如listOfarrayOfmutableListOf,这不是必须的,但遵循最佳实践总是好的。