Difference between List and Array types in Kotlin
1 2 3 4 5 6 7 | val names1 = listOf("Joe","Ben","Thomas") val names2 = arrayOf("Joe","Ben","Thomas") for (name in names1) println(name) for (name in names2) println(name) |
数组和列表(以
EDOCX1 11是一个已知实现的类:它是一个顺序固定大小的内存区域,存储项目(在JVM上用Java数组表示)。
List 和MutableList 是具有不同实现的接口:ArrayList 和LinkedList 等。列表的内存表示和操作逻辑是在具体实现中定义的,例如LinkedList 中的索引通过链接并花费O(n)时间,而ArrayList 将其项动态存储在分配的数组。1
2val list1: List<Int> = LinkedList<Int>()
val list2: List<Int> = ArrayList<Int>()Array 是可变的(可以通过对它的任何引用进行更改),但List 没有修改方法(它不是MutableList 的只读视图,也不是不可变的列表实现)。1
2
3
4
5
6
7
8val a = arrayOf(1, 2, 3)
a[0] = a[1] // OK
val l = listOf(1, 2, 3)
l[0] = l[1] // doesn't compile
val m = mutableListOf(1, 2, 3)
m[0] = m[1] // OK号
数组的大小是固定的,不能扩展或收缩保留标识(您需要复制一个数组来调整其大小)。在列表中,
MutableList 具有add 和remove 功能,可以增加和减少其大小。1
2
3
4
5
6val a = arrayOf(1, 2, 3)
println(a.size) // will always be 3 for this array
val l = mutableListOf(1, 2, 3)
l.add(4)
println(l.size) // 4Array 在T 上不变(Array 不是Array ,与MutableList 相同,但List 是协变的(List 是List )。1
2val a: Array<Number> = Array<Int>(0) { 0 } // won't compile
val l: List<Number> = listOf(1, 2, 3) // OK。
数组为原语优化:有单独的EDOCX1,32,EDCOX1,33,EDCX1,34,等等,它们被映射到Java原始数组(EDCOX1,35,EDCOX1,36,EDCOX1,37),不是盒装的(EDCOX1,26)被映射到Java的EDCOX1 39)。列表通常没有为原语优化的实现,尽管一些库(JDK之外)提供了原语优化的列表。
EDOCX1·9和EDCOX1(10)是映射类型,在Java互操作性方面具有特殊的行为(Java的EDCOX1×9)是从Kotlin中看到的,要么是EDCOX1,9是EDCX1,要么是10)。还映射了数组,但它们具有Java互操作性的其他规则。
某些数组类型用于注释(基元数组、
Array 和带有enum class 项的数组),并且注释有一个特殊的数组文字语法。不能在批注中使用列表和其他集合。至于使用,好的做法是喜欢使用数组遍历数组,除了代码的性能关键部分,推理与Java相同。
小精灵
与使用端的主要区别在于数组的大小是固定的,而
此外,
在JVM级别上,
**常规,列表类型和数组类型的区别是:**
1 | List<...>: |
仅供阅读。
1 | Array<...>: |
。
你可以修改它,或者添加一些东西。