C#中,数组、List、ArrayList、Directory、LinkedList的区别与性能

数组int[] count = new int[10];
ListList<int> list = new List<int>;
ArrayListArrayList arrayList = new ArrayList();
DictionaryDictionary<string, int> dire = new Dictionary<string, int>();
LinkedListLinkedlList<string> linkedList = new LinkedList<string>();

分析:
从上面的初始化可以看出,这几种类型都是属于引用类型。其中数组、ListDictionaryLinkedList在初始化时需要指定其元素类型(数组还需要指定其大小),而ArrayList在初始化时不需要指定其类型。

数组:在初始化时必须指定其大小和类型,它在内存中是连续存储的,所以可以看出数组的索引速度是非常快的。在确定了数组的长度和类型后,选择数组存储数据是比较好的选择。不适合插入操作。

List:在初始化的时候必须指定集合内对象的数据类型,但是不需要指定大小,它不会像ArraryList那样在存取过程中引起装箱和拆箱操作,避免了类型不安全性。在类型相同的情况下,List和数组的性能相当。插入操作方便。

ArrayList:ArrayList在System.Collections命名空间下,同时继承了IList接口。ArrayList对象的大小可按照存储的数据进行动态增减,在初始化的时候不需要指定其大小和类型。针对数组在两个数据之间插入数据较麻烦,而且初始化时必须确定其大小,因此C#提供ArrayList克服这些缺陷,它可以存储不同的数据类型,存取的所有数据会转化为object类型,插入操作方便,但是在对值类型进行存取和检索时,会引起装箱和拆箱,降低了性能,同时ArrayList没有泛型的实现,它不是类型安全的,在处理数据时很有可能产生数据不匹配的错误。

Dictionary:在初始化的时候也必须指定其类型,而且它还需要指定一个Key,并且这个Key是唯一的。正因为这样,Dictionary的索引速度非常快。但是也因为它增加了一个Key,Dictionary占用的内存空间比其它类型要大。它是通过Key来查找元素的,元素的顺序是不定的。

LinkedList:数组和数组列表都有一个重大的缺陷,这就是从数组的中间位置删除一个元素需要付出很大的代价,其原因是数组中处于被删除元素之后的所有元素都要向数组的前端移动。在数组的中间的位置插入一个元素也是如此。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值