Kotlin中List和Arraytypes的区别
 List和Arraytypes有什么区别? 
 看起来可以对它们进行相同的操作(循环,过滤expression式等),在行为或用法方面是否有区别? 
 val names1 = listOf("Joe","Ben","Thomas") val names2 = arrayOf("Joe","Ben","Thomas") for (name in names1) println(name) for (name in names2) println(name) 
	
  数组和列表(由List<T>及其子typesMutableList<T> )有很多不同之处,这里最重要的是: 
- 
Array<T>是一个具有已知实现的类:它是一个存储项目的顺序固定大小的内存区域(在JVM上它由Java数组表示)。List<T>和MutableList<T>是具有不同实现的接口:ArrayList<T>,LinkedList<T>等。列表的内存表示和操作逻辑在具体实现中定义,例如在LinkedList<T>索引链接并需要O(n)时间,而ArrayList<T>将其项存储在dynamic分配的数组中。val list1: List<Int> = LinkedList<Int>() val list2: List<Int> = ArrayList<Int>()
- 
Array<T>是可变的(它可以通过对它的任何引用进行更改),但List<T>没有修改方法(它是MutableList<T>只读视图或不可变列表实现 )。val 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<T>具有add和removefunction,以便增加和减小其大小。val 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) // 4
- 
对于 MutableList<T>,Array<T>在T(Array<Int>不是Array<Number>)上是不变的,但List<T>是协变的(List<Int>是List<Number>)。val a: Array<Number> = Array<Int>(0) { 0 } // won't compile val l: List<Number> = listOf(1, 2, 3) // OK
- 
数组针对基元进行了优化:有独立的 IntArray,DoubleArray,IntArray等映射到Java基本数组(int[],double[],char[]),而不是装箱的(Array<Int>映射到Java的Integer[])。 一般而言,列表没有针对基元进行优化的实现。
- 
List<T>和MutableList<T>是映射types,并且在Java互操作性(Java的List<T>被从Kotlin看作List<T>或MutableList<T>)中有特殊的行为。 数组也被映射,但是它们具有Java互操作性的其他规则 。
- 
至于使用方法,最好的做法是更喜欢使用列表遍布数组,除了代码的性能关键部分,参数与Java的参数相同。 
 与使用方面的主要区别在于, 数组具有固定大小,而(Mutable)List可以dynamic调整其大小。 而且, Array是可变的,而List不是。 
 而且, kotlin.collections.List是一个由java.util.ArrayList实现的接口。 它还通过kotlin.collections.MutableList进行扩展,以便在需要修改项目的集合时使用。 
 在jvm级别Array由数组表示。 另一方面, List由java.util.List表示,因为在Java中没有不变的集合等价物。