Arrays 和列表(由 List<T>
及其子类型 MutableList<T>
表示)有许多不同之处,这里是最重要的:
Array
Array
数组具有固定大小,不能扩展或缩小保留标识(您需要复制数组以调整其大小)。对于列表, MutableList
Array
数组针对原语进行了优化:有单独的 IntArray、DoubleArray、CharArray 等映射到 Java 原始数组(int[]、double[]、char[]),而不是装箱的数组(Array
List
某些数组类型用于注解(原始数组、Array
至于用法,好的做法是在任何地方都喜欢使用列表而不是数组,除了代码的性能关键部分,推理与 Java 相同。
与使用方面的主要区别在于 Arrays 具有固定大小,而 (Mutable)List
可以动态调整其大小。此外,Array
是可变的,而 List
不是。
此外,kotlin.collections.List
是由 java.util.ArrayList
实现的接口。它还被 kotlin.collections.MutableList
扩展以在需要允许修改项目的集合时使用。
在 jvm 级别上,Array
由 arrays 表示。另一方面,List
由 java.util.List
表示,因为 Java 中没有可用的不可变集合等价物。
除了上述之外,身份比较也有所不同:
val l1 = listOf("a")
val l2 = listOf("a")
var x = (l1 == l2) // => true
val a1 = arrayOf("a")
val a2 = arrayOf("a")
var y = (a1 == a2) // => false
Array
中有什么是可变的?只有它的元素 -List
中的相同。List
的大小也是固定的。val intArray = arrayOf(1,2,3); intArray[0] = 2
而这不会val intList = listOf(1,2,3); intList[0] = 2
。List
确实具有固定大小,但扩展它的MutableList
没有,因此val a:List<Int>
可能会在后续调用中报告不同的size
。List
还是ArrayList
?List
(可能是 99% 的情况🙂)。如果您确实关心实现,请使用ArrayList
或LinkedList
或任何其他具体实现。