C#数组和列表的区别

参考文章:深刻理解C#中数组,ArrayList,List之间的区别 - 知乎 (zhihu.com)

                  C#:List与数组区别,什么时候用哪个_c#数组首地址_四夕立羽的博客-CSDN博客

数组

        数组是引用类型,它的声明,只是为其引用预留空间,随后使用new运算符创建实例,将数组元素赋值为默认值。因为数组元素的地址在内存中是连续的,所以它的访问速度是非常快的,而且修改元素数值也很方便,但有利也有弊,这也导致了数组进行复杂操作时捉襟见肘,比如插入和删除中间元素,这需要对大部分元素进行位置移动。

        在C#中,数组分为矩形数组和交错数组,它们都是多维的,在某些时候可以更好的管理数据。

        在数组创建阶段,需要手动指明数组的长度,这就会很被动,需要我们提前知道数据的长度,如果数组长度过长,这会导致内存的大大浪费,而数组长度过短的话,又会导致数据溢出,报错,这给数组的使用戴上了枷锁。

列表

        列表是一个提前封装好的泛型类,它可以安全地接受各种类型的数据。它的内部其实维护着一个泛型数组,因为提前封装好了各种操作方法,这导致列表在元素插入、删除方面更方便,在进行复杂操作时,列表无疑是一个更好的选择。

        列表内部的数组是一个一维数组,这也在一定程度上限制了列表的使用,不过列表在创建时不需要指定长度,因为它可以使用内置方法对自身长度进行扩容。

        同时其内存分配方式也是不合理的,当增加元素需要对数组进行2的指数扩充时,原数组会被抛弃,且当元素数量为520时,剩余的504个元素会造成大部分内存空间的浪费,这会给GC带来很大的压力,

总结

        数组适合对已知长度的数据进行存放、读取和修改,列表适合充当数据库,随时进行数量不定的数据的增删查改。列表只是一个兼容性比较强的组件,使用效率并不高。

        

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值