列表的默认容量

Jaw*_*ABU 45 .net c#

List的默认容量是多少?

Mar*_*ers 55

你为什么不试试呢?

Console.WriteLine("Default capacity of a List: " + new List<int>().Capacity);
Run Code Online (Sandbox Code Playgroud)

这个答案适用于具有List的所有.NET版本.在我的版本中,它恰好是0.

  • “你为什么不尝试一下呢?” 问题从负面角度提出了这个问题,恕我直言,这是一个错误。即使对于出于文档目的“很容易尝试”的事情,这里也应该存在问题。 (5认同)

Tho*_*rin 48

实际上,它从容量0开始.当您添加第一个元素时,当前实现分配容量为4.之后,如果需要扩展,容量将保持加倍,以保证摊销的O(1)操作.

请记住,这是当前的行为.你不应该依赖它.这应该证明当前的行为:

List<int> list = new List<int>();
int capacity = list.Capacity;
Console.WriteLine("Capacity: " + capacity);

for (int i = 0; i < 100000; i++)
{
    list.Add(i);
    if (list.Capacity > capacity)
    {
        capacity = list.Capacity;
        Console.WriteLine("Capacity: " + capacity);
    }
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 38

根据MSDN无参数构造函数文档中的示例,创建列表的初始容量:

List<string> x = new List<string>();
Run Code Online (Sandbox Code Playgroud)

是的.据我所知,这不作为保证记录,也没有记录调整大小的策略(即它目前可以加倍至少4,但在.NET 5.0中它可以加倍至少128 .)基本上你不应该依赖这种行为.

  • @Brian:不,在这种情况下,默认初始容量为0.4是列表必须具有元素的第一个容量.重要的是它没有被记录*为0或4.在下一个版本中它可能是100而不会破坏任何记录的行为. (4认同)
  • @Jon:我完全同意这是一个实现细节,这是重点.我明白你的意思了.一旦实际将某些内容添加到列表中,则为"默认容量". (2认同)

Eli*_*sha 5

列表的默认容量为4个项目(插入初始项目后,否则大小为0)

var list = new List<int>();
list.Add(1);

Assert.AreEqual(4, list.Capacity);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,它不断使初始容量加倍,而不是2的幂。如果给定的初始容量3,则将得到3、6、12、24等。 (5认同)