刚开始使用 Kotlin,我喜欢它,但是……我无法理解这种语言中的 Lists 和 Arrys。我对编程并不陌生,不需要解释什么是数组。我不明白的是。
列表和数组有什么区别?它们看起来非常相似,您都使用 [index] 访问它们并以几乎相同的方式使用它们。如果列表是不可变的,那么它们就更加相同,所以......有什么区别?假设列表不是链表,它们的访问时间都是 O(1)。
如果我使用列表;可变和不可变有什么区别?什么时候可以编辑内容?什么时候可以改变长度?
同一事物似乎有许多重叠且令人困惑的名称。List、ListOf、ArrayList、IntArray、intArray...
有人可以列出所有这些列表,并在您使用每一个时给出某种经验法则。具体来说,我发现不可变空列表的概念非常令人困惑。那到底是用来做什么的?
你如何初始化这些东西?
抱歉问了这么长的问题,
谢谢。
List
接口是描述一些常见的列表操作,而接口Array
是类。从内存的角度来看,Array
是内存中的连续区域,其大小不会改变,这就是为什么创建后不能更改其大小Array
,但可以更改其元素,另一方面List
可以通过不同的方式实现,意思是内存结构可以不同,最常见的实现是ArrayList
使用数组来存储元素,一旦数组被填充,它就会被更大的数组改变,旧数组的内容被添加到新数组中,另一种实现是,LinkedList
你有节点指向到列表中的下一个元素。从性能角度来看Array
,它总是比任何实现都快List
,但它也受到更多限制。List
和之间的区别MutableList
在于,当您使用时MutableList
,您可以更改该列表的元素(从中添加或删除元素),而当使用 immutable 时,List
您不能从中添加或删除元素。这两个列表都允许您更改这些元素的属性。
将这个答案分为三个答案:
List
是扩展Collection
接口的接口,提供基本的常见列表操作,MutableList
扩展List
接口以及MutableCollection
添加更改该列表元素所需的方法的接口,listOf
是创建List
并用给定参数填充它的函数,通过使用listOf
我们不需要指定哪个将使用的实现List
,例如在 JVM 上List
由java.util.Arrays.ArrayList
(与 ) 不同java.util.ArrayList
,而在 JavaScript 方面,它可能由Array
(与此声明不同,因为我从未在 JS 中使用过 Kotlin)ArrayList
是typealias to java.util.ArrayList
,没有什么特别的,它是 JavaList
接口的实现,MutableList
由 JVM 上的这个实现支持。Array
相当于Java的数组,也没有什么特别之处,IntArray
为了弥补kotlin中原始类型的不足,使用了其他原始数组公司,与Java中Array<Int>
相同,而与. 相同的逻辑适用于所有其他变体。使用原始类型可以获得更好的性能,但在现代计算机上的大多数情况下,差异可以忽略不计,如果您确实有很多数据,则应该尽可能使用原始类型。Integer[]
IntArray
int[]
您可以在kotlin 存储库上查看所有集合层次结构
listOf
、arrayOf
、mutableListOf
,这不是必须的,但遵循最佳实践总是好的。 归档时间: |
|
查看次数: |
2857 次 |
最近记录: |