C#常用容器与底层

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中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值