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?

我不知道,到最后它是在计算什么吗?

ArrayList中的Capacity属性

CapacityCount代表两种不同的

Count返回的项数

Capacity告诉ArrayList当前可以容纳的最大项目数。当您在ArrayList 中放入更多项目时,容量将自动增加

Count属性告诉ArrayList中当前有多少元素,而Capacity属性告诉他在不分配更多内存的情况下有多少元素可以放入ArrayList中。

它是如何计算为4的?

当您将元素添加到List时,它将检查Capacity元素是否适合。否则,它将只是"预分配"ArrayList的容量,使其当前Capacity的容量翻倍。

所以在您的示例中,它是4,因为当添加第一个元素时,初始容量将设置为4。您可以通过添加更多元素来测试这一点。添加5个元素后,列表容量将为8,依此类推

希望这能帮助

CapacityCount不同。前者是内部支持数组的大小,因此在需要重新创建之前,此数组可以容纳多少项。后者只是当前项目的计数。

如果需要,加倍算法会增加内部阵列的大小:

EnsureCapacityArrayList.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。