c#三种数组数据结构的比较

1.Array数组

在C#语言中,数组是最简单的数据结构之一,其具有一下三个特点

1.数组储存在连续的内存上
2.数组的元素都是相同的类型,或者基于相同类型的衍生物,因此,数组又被认为是同质数据结构
3.数组可以通过下标来访问

数组的常规操作

1.分配储存空间,例如声明一个新的数组int[] arr = new int[5].
2.访问数组中的元素数据,例如通过下表来获取数组中的某个元素;int i = arr[0];

在创建新的数组的时候,将在Mono运行时的托管堆中分配一块连续的内存空间来盛放数量为size,类型为所生命类型的数组元素,如果类型为值类型,则将会有size个未装箱的该类型的值被创建,如果类型时引用类型,将会又四则个相应类型的引用被创建
创建普通数组的方式有很多,如下

 //声明一维数组
        int[] array = new int[] { 1, 2, 3, 4, 5 };
        int[] array1 = new int[5];
        int[] array2 = { 1, 2, 3, 4, 5 };
        //声明二位数组
        int[,] array3 = new int[2, 3];
        int[,] array4 = { { 1, 2, 3 }, { 4, 5, 6 } };
        int[][] array5 = new int[6][];

如上图,声明这种类型的数组方式有很多,原理都是一样的,由于是在连续内存上储存的,
**优点:**他的索引速度分长块,访问一个元素的事件是恒定的,也就是说与数组的元素数量无关,而且赋值与修改元素也很简单,只需要直接指定下标索引,修改其值即可,当然有利也有弊,
**缺点:**由于是连续储存的,所以在两个元素之间插入新的元素就变得分长不方便,
**缺点:**声明一个系的呢数组时,必须要声明其长度或者初始化元素,这样就会存在一个潜在的问题,当声明的长度过长,显然会浪费内存,声明长度过短,面临浪费资源的问题,如果设定的长度过短,则又面临溢出的风险,这就使得写代码具有偶然性。

ArrayList数组

从上文可知,由于Aray创建的时候必须要指定长度,并且类型必须时相同类型的数据结构,为了解决上述的缺点,C#引入了ArrayList数组,
优点: 不必在声明ArrayList时指定长度,这是由于ArrayList对象时按照其中储存的数据来动态的增长与缩减的。
优点: ArrayList可以储存不同类型的元素,这是因为,ArrayList数组会把储存进去的元素都当作Object处理,所以加入不同类型的数据元素是可以的

基本操作

 ArrayList arrayList = new ArrayList();
        arrayList.Add(5);
        arrayList.Add(4);
        arrayList.Remove(4);
        arrayList.RemoveAt(0);

至于上文的两种移除操作,一个是根据索引移除,一个可以认为是根据值来删除
由于ArrayList可以储存不同类型数据的原因,并且是把不同的数据元素类型都当作Object来处理,那么就会出现问题
缺点: ArrayList 是类型不安全的,因为把不同的类型都当作Object来处理,很有可能在使用ArrayList的时候发生类型不匹配的问题
缺点: 数组储存值类型时未发生装箱,但是由于ArrayList把所有的类型都当作了Object,所以不可避免地时当插入值类型的时候会发生装箱操作,在索引取值的时候会发生拆箱操作,因此,在频繁的读写ArrayList时会产生频繁的装、拆箱这种额外的开销操作,导致性能下降。

List

这种数据结构同时解决了上述两种结构的缺点,在C#引入了泛型的概念之后,List可以当作一种新的数据类型引入,并且这种数据类型也是工作中最常用的数组类型,

优点: 不需要指定数组长度
优点: 类型安全
优点: 不需要进行装箱和拆箱操作
基本操作:

List<string> vs = new List<string>;
        vs.Add("s");
        vs.Remove("s");
        vs.RemoveAt(0);
        vs.Insert(1, "e");
        ...

好了至此,对三种数据结构应该有一个详细的了解了,不同场景使用不同的结构就好啦。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值