Array
最基本的数组。在内存中是连续存储的,索引速度非常快,而且赋值与修改元素很快也很简单。
不足之处:
在两个数组直接插值很麻烦,并且在声明的时候需要指定数组的长度。
ArrayList
动态数组,Array的加强版,底层也是数组,继承了IList接口。ArrayList对象的大小是按照其中存储的数据来动态扩充与收缩的。所以,在声明ArrayList对象时并不需要指定它的长度。
但是ArrayList会把所有插入其中的数据当作为object类型来处理,也就是说你可以在0号位置存int,1号位置存string,所以在我们使用ArrayList处理数据时,很可能会报类型不匹配的错误,也就是说ArrayList不是类型安全的。而且在存储或检索值类型的时候通常会发生装箱和拆箱操作,带来很大的性能消耗。
List
底层和ArrayList一样。因为ArrayList不是类型安全的且需要频繁的装箱拆箱,所以出现了泛型的概念。List是ArrayList的泛型等效类,大部分用法都与ArrayList相似,因为List也继承了IList接口。最关键的区别在于,在声明List的时候需要给List集合内部数据的对象一个类型。
LinkedList
相当于C++中的list,内部实现是双链表,插入删除快,查找慢。
在List中增加、删除节点的速度,大体上快于使用LinkedList时的相同操作。将 List.Add方法和LinkedList的Add方法相比较,真正的性能差别不在于Add操作,而在LinkedList在给GC(垃圾回收机制)的压力上。一个List本质上是将其数据保存在一个堆栈的数组上,而LinkedList是将其所有节点保存在堆栈上(人家是一个,我是一系列)。这就使得GC需要更多地管理堆栈上LinkedList的节点对象。注意,List.Insert方法比在LinkedList中