c# list 容量_讲解c#中ArrayList是怎么实现的自动扩容增长?

C#中的ArrayList在添加元素时能自动扩容,当数组满时,其通过`EnsureCapacity`方法按当前大小的2倍增加空间。如果超过最大容量,会设置为2146435071。在设置`Capacity`属性时,会创建新数组并拷贝原有元素,原数组引用指向新数组,从而实现扩容。这个过程涉及`Array.Copy`本地方法,提高了性能。
摘要由CSDN通过智能技术生成

我们都知道c#中的ArrayList是一个类似数组的集合,使用的时候不用像数组那样需要先定义数组的大小。

ArrayList具有自动扩容增长的功能,那么它的底层是怎么实现的呢?Java中其实也是类似的原理。

ArrayList在空间System.Collections下面:

可以看到,ArrayList实现了接口,IList,ICollectiton等接口,且里面定义一些内部的私有类,这些类我们暂且不管它。

我们关心的是ArrayList的类。

可以从上面截图看到有几个属性很重要:

private object[] _items;//用于存储元素类型为object,因此可以用来存任何类型,注意:这个数组不是所有都有值

private int _size;//集合实际元素大小,自动扩容将要用到的

private const int _defaultCapacity = 4;//默认初始容量。

下面我们从,Add方法开始:

public virtual int Add(object value)

{

if (this._size == this._items.Length)

{

this.EnsureCapacity(this._size + 1);//当没有空间后自动增加空闲空间

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值