.NET中的List是否与Java中的arraylist相同?

时间:2010-03-19 10:33:54

标签: java .net list arraylist

当我学习Java时,我被告知arraylist以这种方式工作:

  • 它创建一个可容纳10个元素的数组。

  • 添加第11个元素时,会创建一个包含20个元素空间的新列表,并将10个元素复制到新数组中。这将重复,直到没有更多要添加的元素或最大尺寸。

.NET中的List是否以相同的方式构建?

4 个答案:

答案 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类型将其内部数组长度加倍。

MSDN Link

答案 2 :(得分:1)

细节略有不同(就元素的默认数量及其扩展方式而言),但基本上是相同的。

答案 3 :(得分:1)

我相信它是如何运作的,是的。我现在找不到任何文档告诉你他们使用的确切算法,但肯定有Capacity(“内部”数组的大小)和Count(实际数字)的概念你添加的元素。)