1

我正在学习 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 ?

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

4

4 回答 4

3

CapacityCount代表两种不同的事物

Count返回项目数

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

于 2013-08-04T20:14:08.440 回答
3

Count属性告诉当前有多少元素在ArrayList哪里,因为属性告诉在不分配更多内存的情况下Capacity可以容纳多少元素。ArrayList

它如何计算为 4 ?

当您将元素添加到 List 时,它将检查该Capacity元素是否适合。如果不是,它只会“预分配”ArrayList容量使其当前的Capacity.

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

希望这可以帮助

于 2013-08-04T20:17:15.837 回答
2

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

容量是 ArrayList 可以存储的元素数量。Count 是 ArrayList 中实际存在的元素数。容量始终大于或等于 Count。如果在添加元素时 Count 超过了容量,则通过在复制旧元素并添加新元素之前重新分配内部数组来自动增加容量。

于 2013-08-04T20:15:36.093 回答
0

当您向 ArrayList 添加一个元素时,它将为 4 个元素创建最大内存空间,接下来如果您添加超过 4 个元素,它会自动将其增加到 8 个并继续。

例如:ArrayList arr = new ArrayList();

  arr.Add("xyz");
  arr.Add(23);
  arr.Add("abc"); 

为此,它将显示容量为 4,计数为 3,对于此数组,如果再添​​加 2 个元素,则容量将加倍,即 8,计数为 5。

于 2017-03-20T10:15:40.200 回答