ArrayList中的容量属性

时间:2013-08-04 20:12:05

标签: c#

我正在学习C#中Arraylist的属性。我浏览了代码,并实现了一个简单的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 个答案:

答案 0 :(得分:3)

CapacityCount代表两种不同的东西

Count返回项目数

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

答案 1 :(得分:3)

Count属性告诉ArrayList当前有多少元素,其中Capacity属性告诉ArrayList可以容纳多少元素而不分配更多内存。

  

如何将其计算为4?

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

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

希望这有帮助

答案 2 :(得分:2)

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

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

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可以存储的元素数。计数   是ArrayList中实际的元素数。容量   始终大于或等于Count。如果计数超过容量   在添加元素时,容量会自动增加   在复制旧元素之前重新分配内部数组   添加新元素。

答案 3 :(得分:0)

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

例如:  ArrayList arr = new ArrayList();

$('.customers').slick({
dots: true,
arrows: false,
infinite: true,
speed: 600,
slidesToShow: 1,
slidesToScroll: 1,
autoplay: true,});

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