我正在学习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吗?
我不知道,到底是在计算什么?
答案 0 :(得分:3)
Capacity
和Count
代表两种不同的东西
Count
返回项目数
Capacity
告诉ArrayList当前可以容纳的最大项目数。当您在ArrayList中放入更多项目时,容量会自动增加
答案 1 :(得分:3)
Count
属性告诉ArrayList
当前有多少元素,其中Capacity
属性告诉ArrayList
可以容纳多少元素而不分配更多内存。
如何将其计算为4?
当您向List添加元素时,它将检查Capacity
该元素是否适合。如果不是,它会将ArrayList
容量“预分配”为其当前Capacity
的两倍。
所以在你的例子中它是4,因为当添加第一个元素时,初始容量将被设置为4
。您可以通过向其添加更多元素来测试它。添加5个元素后,列表容量将为8
,依此类推。
希望这有帮助
答案 2 :(得分: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可以存储的元素数。计数 是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。