C#:List与数组区别以及各自适用场

1.数组优缺点:

1.数组在内存中是连续存储的,所以它的索引速度是非常的,而且赋值与修改元素也很简单。整个数组是以首地址开头的一块连续的内存单元。如有字符数组char c[10]。设数组c的首地址为2000,也就是说c[0]单元地址为2000。则数组名c就代表这个首地址。

2.天然支持多维数组

3.数组也存在一些不足的地方。比如在数组的两个数据间插入数据很麻烦的,还有我们在声明数组的时候,必须同时指明数组的长度,数组的长度过长,会造成内存浪费,数组和长度过短,会造成数据溢出的错误。这样如果在声明数组时我们并不清楚数组的长度,就变的很麻烦了

2.List优缺点:

数组可以多维,list原本一维。

通过允许指定泛型类或方法操作的特定类型,泛型功能将类型安全的任务从您转移给了编译器。不需要编写代码来检测数据类型是否正确,因为会在编译时强制使用正确的数据类型。减少了类型强制转换的需要和运行时错误的可能性。泛型提供了类型安全但没有增加多个实现的开销。

有挺多封装好的函数

List内部维护着一个数组_items,用来存放T类型的元素。→当有新的T类型元素存放进来,即调用Add(T item)方法。→Add(T item)方法内部调用EnsureCapacity(int min)方法确保List的Capaicty属性值至少在原先长度上加1。→在给Capacity赋值的过程中,对_items的长度进行了扩容。→扩容后,再把新的T类型元素存放进来。

当有新的元素存放到List中时,List先对其维护的内部数组进行扩容,然后再把新元素放进来。

3.各自适用场景

数组长度固定,List未限定长度,且支持的功能更多,最常用的List底层实际上也是使用数组实现。不需要复杂功能和确定长度的情况下,使用数组效率更高,通常情况建议使用List。

例如:地图数据用数组,天然支持二维

小结:

数组Arr:--存储同类型数据,索引以及读写速度快,但是不支持特定类型数据,且声明需要指定长度

List:允许指定泛型类T类型参数或方法操作的特定类型,list声明不需要指定长度,入参相比于数组比较灵活

你可能感兴趣的:(c#,数据结构,算法)