当我学习Java时,我被告知arraylist以这种方式工作:
它创建一个可容纳10个元素的数组。
添加第11个元素时,会创建一个包含20个元素空间的新列表,并将10个元素复制到新数组中。这将重复,直到没有更多要添加的元素或最大尺寸。
.NET中的List是否以相同的方式构建?
答案 0 :(得分:3)
您可以通过查询列表的Capacity
:
var a = new List<string>();
Console.WriteLine(a.Capacity); // Writes 0
a.Add("abc");
Console.WriteLine(a.Capacity); // Writes 4
a.Add("abc");
a.Add("abc");
a.Add("abc");
a.Add("abc");
Console.WriteLine(a.Capacity); // Writes 8
因此它在实例化时根本没有分配任何空间,而是在第一次添加项目时。从8开始增长到16,32等......
答案 1 :(得分:1)
每次填充当前数组时,通用List类型将其内部数组长度加倍。
答案 2 :(得分:1)
细节略有不同(就元素的默认数量及其扩展方式而言),但基本上是相同的。
答案 3 :(得分:1)
我相信它是如何运作的,是的。我现在找不到任何文档告诉你他们使用的确切算法,但肯定有Capacity
(“内部”数组的大小)和Count
(实际数字)的概念你添加的元素。)