【发布时间】:2010-12-12 12:37:08
【问题描述】:
我一直在使用Reflector 研究 .NET 的 List 和 ArrayList 实现。
在查看 Add(T item) 时,我遇到了这个问题。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++;
}
因此 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;
}
}
为什么内部容量默认为 4,然后以 2 的倍数递增(即:double)?
【问题讨论】:
-
对它所做的事情的更清晰和更准确的描述是将大小“加倍”。我不只是一个书呆子。在我阅读代码之前,我以为您实际上在说一些完全不同的东西。
标签: c# .net performance algorithm memory-management