原理
Array数组是包含n个相同类型的变量,这些变量可以通过索引来访问,在内存中保存的是连续的空间,一但声明变量长度是不可更改的。
int[] array = new int[10];//长度固定,超出长度读取会报错。
ArrayList 你解决array数组不可变的问题,本质上是对array的封装,可以动态改变数组的,他还有添加删除功能,也能通过索引访问,使用比较灵活,它在不变的情况下内存空间是连续的c#list,但是在不同时刻不能期待他不能在同一块内存。
//这是开源的arrylist构造代码片段,里面new了个object数组
public ArrayList(ICollection c)
{
ArgumentNullException.ThrowIfNull(c);
int count = c.Count;
if (count == 0)
{
_items = Array.Empty();
}
else
{
_items = new object[count];
AddRange(c);
}
}
//感兴趣可以看看源码:
// https://github.com/dotnet/runtime/blob/215b39abf947da7a40b0cb137eab4bceb24ad3e3/src/libraries/System.Private.CoreLib/src/System/Collections/ArrayList.cs
为啥不推荐使用?
由于声明后默认是包含若干个object,可以添加任何类型,由于类型可以不同,在使用的时频繁的装箱拆箱,不建议使用,如果长度可控,建议使用下标数组,以提高性能。
另外在.NET 2.0微软推出泛型,主要解决固定类型问题,类型固定的用Listc#list,而arrayList不固定,List兼容了arrayList添加删除等功能,完美的替代了ArrayList,并且不存在拆箱装箱的问题。
List a=new List();
//List中的T是指定的类型,不存在同一变量下
什么时候合适用ArrayList呢?
当List可以用ArrayList,List运行时泛型不存在,List原理上是不等于ArrayList的。
结语
如果你有不同建议,欢迎留言讨论。
参考:
限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。