我们都知道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);//当没有空间后自动增加空闲空间
}