ArrayList中的Capacity属性
本文关键字:属性 Capacity 中的 ArrayList | 更新日期: 2023-09-27 18:26:27
我正在学习C#中Arraylist的属性。我浏览了代码,并实现了一个简单的数组列表。下面是我尝试过的代码。
ArrayList newal= new ArrayList();
newal.Add( "Alice");
newal.Add( "Wonderland");
newal.Add( "Dreamland");
Console.WriteLine( "Capacity:{0}",newal.Capacity );
这里的答案是count=3(如果我计算的话),我理解,但容量是4。它是如何计算为4的?默认情况下是否包括null?
我不知道,到最后它是在计算什么吗?
Capacity
和Count
代表两种不同的
Count
返回的项数
Capacity
告诉ArrayList当前可以容纳的最大项目数。当您在ArrayList 中放入更多项目时,容量将自动增加
Count
属性告诉ArrayList
中当前有多少元素,而Capacity
属性告诉他在不分配更多内存的情况下有多少元素可以放入ArrayList
中。
它是如何计算为4的?
当您将元素添加到List时,它将检查Capacity
元素是否适合。否则,它将只是"预分配"ArrayList
的容量,使其当前Capacity
的容量翻倍。
所以在您的示例中,它是4,因为当添加第一个元素时,初始容量将设置为4
。您可以通过添加更多元素来测试这一点。添加5个元素后,列表容量将为8
,依此类推
希望这能帮助
Capacity
与Count
不同。前者是内部支持数组的大小,因此在需要重新创建之前,此数组可以容纳多少项。后者只是当前项目的计数。
如果需要,加倍算法会增加内部阵列的大小:
EnsureCapacity
在ArrayList.Add
上检查此项,因此它至少是4(ILSpy,.NET 4)
// System.Collections.ArrayList
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;
}
}
MSDN:
Capacity是ArrayList可以存储的元素数。计数是ArrayList中实际存在的元素数。容量总是大于或等于Count。如果计数超过容量添加元素时,容量自动增加在复制旧元素之前重新分配内部数组添加新元素。
当您将一个元素添加到ArrayList时,它将为4个元素创建最大内存空间,接下来如果您添加了4个以上的元素,它将自动将其增加到8并继续。
例如:ArrayList arr=新的ArrayList();
arr.Add("xyz");
arr.Add(23);
arr.Add("abc");
为此,它将显示容量为4,计数为3对于这个数组,如果再添加2个元素,则容量将加倍,即8,计数为5。