Arrays Kotlin中数组和集合之间的差异

Arrays Kotlin中数组和集合之间的差异,arrays,kotlin,set,Arrays,Kotlin,Set,有人能说出Kotlin中集合和数组之间的区别吗?在哪些条件下哪个更好?在数组允许的情况下,Set不允许重复元素。这取决于要求。 如果要求只有唯一的值,那么Set是您的最佳选择,因为Set的任何实现都只维护唯一的值。简短回答:数组是包含固定数量项的索引数据结构;集合是一种无序的数据结构,包含没有重复项的项。两者都是打字的 长答覆: 从根本上讲,Kotlin中的数组与大多数其他语言类似:一个包含相同类型值的数据结构。数组具有固定的长度,按顺序排列,并按索引随机访问(从0开始) 数组直接映射到Java

有人能说出Kotlin中集合数组之间的区别吗?在哪些条件下哪个更好?

在数组允许的情况下,Set不允许重复元素。这取决于要求。
如果要求只有唯一的值,那么Set是您的最佳选择,因为Set的任何实现都只维护唯一的值。

简短回答:数组是包含固定数量项的索引数据结构;集合是一种无序的数据结构,包含没有重复项的项。两者都是打字的

长答覆:

从根本上讲,Kotlin中的数组与大多数其他语言类似:一个包含相同类型值的数据结构。数组具有固定的长度,按顺序排列,并按索引随机访问(从0开始)

数组直接映射到Java数组。这是JVM提供的唯一数据结构,而不是对象。(事实上,数组类型被视为对象的特殊子类型。)这些是类型化的:您可以有一个基元类型的数组(例如int数组)或一个引用类型的数组(例如数字数组)。该类型在运行时可用,并且是强制的。数组被视为协变(这可能导致运行时错误)

在Kotlin/JVM中,
Array
继承了几乎所有这些特性(协方差除外)。它只用于引用类型的数组;Kotlin为原语数组提供了单独的类(
IntArray
&c)

从根本上讲,一个
集合
就像其他几种语言一样:一个无序的数据结构,包含相同类型的项,其中没有一种是相等的

Set
是Java集合框架的一部分(它还包括
Collection
List
Map
)。
Set
值可以指向实现该接口的任何对象。它是泛型的,只有一个类型参数指定可以存储在集合中的值;这发生在编译时(仅限)

在Kotlin中,
Set
是协变的,并且是只读的;有一个
MutableSet
子接口,它添加了mutator方法
MutableSet
s是可变大小的,可以根据需要进行增长和收缩

Set
(和
MutableSet
)接口有许多不同的实现,它们具有不同的性能特征:插入、删除和测试是否存在可能是O(1)或O(n)或介于两者之间,内存使用和并发性也不同

Set
s可以迭代,但通常不指定顺序。(一些实现可能会保证顺序是否一致,如果一致,是否/如何与值相关和/或如何添加值。)


那么,你应该用哪一种呢?如果您需要防止重复,那么
显然是一个选择。然而,如果您需要对值进行排序,那么
数组
将更合适——尽管因为它不是集合框架的一部分,它并不总是与其他集合类型配合得很好。(Kotlin提供了许多扩展方法来试图消除差距,但仍有许多极端情况。)因此,一般来说,最好使用
列表来代替:这样可以更好地控制易变性,避免一些尴尬的情况(特别是关于类型参数),不固定长度,提供了更多的扩展方法,并且缩短了一个字符

这是两种不同的数据结构,(几乎?)每种编程语言都有set和array的实现。很快,Set-s不允许重复,Array-它确实允许。@marcinj谢谢,但我希望得到更精确的答案,比如它们在有用时的属性。etcSet和Array是许多(如果不是所有)语言中常见的基本数据结构。在网上查找有关该主题的资源应该没有问题。