我一直在用Reflector查看.NET的List和ArrayList实现.
当看到Add(T项目)时,我碰到了这个.EnsureCapacity(this._size + 1):
public void Add(T item)
{
if (this._size == this._items.Length)
{
this.EnsureCapacity(this._size + 1);
}
this._items[this._size++] = item;
this._version++;
}
Run Code Online (Sandbox Code Playgroud)
所以EnsureCapacity看起来像这样:
private void EnsureCapacity(int min)
{
if (this._items.Length < min)
{
int num = (this._items.Length == 0) ? 4 : (this._items.Length * 2);
if (num < min)
{
num = min;
}
this.Capacity = num;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么内部容量默认为4,然后以2的倍数递增(即:double)?