【问题标题】:Does the List in .NET work the same way as arraylist in Java?.NET 中的 List 与 Java 中的 arraylist 的工作方式相同吗?
【发布时间】:2011-01-29 09:48:27
【问题描述】:

当我学习 Java 时,有人告诉我 arraylist 是这样工作的:

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

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

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

【问题讨论】:

    标签: java .net list arraylist


    【解决方案1】:

    您可以通过查询列表的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 表示给出了一个演示答案,并且对于任何敲出几行代码来证明一个理论的人来说都是个人的“欢呼”:-)
    • @Dan:一旦你有了代码段编译器,这几乎不是什么努力:sliver.com/dotnet/SnippetCompiler
    • 我一直使用 Linqpad 做同样的事情。但是您仍然是 StackOverflow 周围的稀有品种之一 ;-)
    • 我实际上从未尝试过 Snippet Compiler - 你每次都必须声明类/命名空间吗?
    • 不,它在启动时为您设置了一个小存根,所以我实际编写的唯一代码就是我最终粘贴到 SO 的内容。
    【解决方案2】:

    每次当前数组被填满时,泛型 List 类型的内部数组长度都会加倍。

    MSDN Link

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我相信这就是它的工作原理,是的。目前我找不到任何文档可以告诉您他们使用的确切算法,但肯定有Capacity(“内部”数组的大小)和Count(您的实际元素数量)的概念已添加)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-29
          • 2016-03-02
          • 1970-01-01
          • 2011-10-09
          • 1970-01-01
          • 2012-09-21
          相关资源
          最近更新 更多