【问题标题】:ASP.NET C# Lists Which and When?ASP.NET C# 列出了哪些以及何时列出?
【发布时间】:2010-11-18 15:45:00
【问题描述】:

在 C# 中似乎有很多不同的列表。在我的脑海中,我能够想出几个,但我相信还有更多。

List<String> Types = new List<String>();
ArrayList Types2 = new ArrayList();
LinkedList<String> Types4 = new LinkedList<String>();

我的问题是什么时候使用一个比另一个更有利?

更具体地说,我正在从函数返回未知大小的列表,我想知道是否有一个特定的列表在这方面做得更好。

【问题讨论】:

    标签: c# asp.net list


    【解决方案1】:

    通常,使用列表。不要使用 ArrayList;它已经过时了。在极少数情况下使用 LinkedList,您需要能够在不调整大小的情况下进行添加,并且不介意随机访问的开销和丢失。

    【讨论】:

    • 我将得出结论,这是战略投票的一个例子。多么有趣。
    【解决方案2】:
    List<String> Types = new List<String>();
    LinkedList<String> Types4 = new LinkedList<String>();
    

    是通用列表,即您定义将进入其中的数据类型,从而减少装箱和取消装箱。

    关于列表与链接列表的区别,请参见 --> When should I use a List vs a LinkedList

    ArrayList 是一个非泛型集合,可以用来存储任何类型的数据类型。

    【讨论】:

    • List 也可以用来存储任何类型的数据,所以这是一个误导性的答案。列表可以专门用于类型或对象。
    【解决方案3】:

    ArrayList 在内存方面可能更小,因为它基于数组。它还具有对元素的快速随机访问。但是,添加或删除列表需要更长的时间。如果在您将继续添加的假设下对象过度分配,这可能会稍微加快。 (这当然会降低内存优势。)

    其他列表会稍大(每个元素多 4 到 8 个字节的内存),并且随机访问时间会很短。但是,在列表末尾添加或删除对象非常快。此外,内存使用量通常会满足您的需要。

    【讨论】:

    • 实际上,ArrayList 通常更大,因为它基本上是一个对象数组(至少对于任何非平凡大小的列表)。
    • @LuckyLindy:当然,模板列表更好。但是除非您存储简单的整数或浮点数,否则数组的内存不会显着增加。无论如何,其他一切都来自对象。
    • LuckyLindy 是正确的:ArrayList 不会更小,但通常会更大。
    • @LuckyLindy,@Steven,你能指出任何支持你的断言的文件吗?
    • @Christopher:对于值类型,ArrayList 必须将它们装箱,并且盒子总是比内容大。 List 为每个非引用 T 生成一个版本。对于引用类型,它无论如何都存储一个指针,但 List 避免了向下转换的成本。简而言之,ArrayList 没有任何优势,应该被认为已经过时了。
    【解决方案4】:

    请参阅 MSDN 上关于 Commonly Used Collection Types 的文章,了解可供您使用的各种类型的集合及其预期用途的列表。

    【讨论】:

      【解决方案5】:

      99% 的时间 列表 是您想要的。不惜一切代价避免使用非泛型集合。

      LinkedList 对于添加或删除项目很有用,而无需四处移动项目,尽管因此您必须放弃随机访问。它确实具有的一个优点是您可以在遍历节点时删除项目。

      【讨论】:

        【解决方案6】:

        ArrayList 是泛型之前的保留。真的没有理由使用它们……它们速度慢,而且比 List 使用更多的内存。一般来说,除非您在非常大的列表中插入中途,否则可能没有理由使用 LinkedList。

        在 .NET 中唯一比 List 更快的是固定数组……但性能差异非常小。

        【讨论】:

          【解决方案7】:

          ArrayList 是 .Net 1.0 列表类型。 List 是 .Net 2.0 中随泛型引入的泛型列表。

          通用列表提供更好的编译时支持。泛型列表是类型安全的。您不能添加错误类型的对象。因此,您知道存储对象的类型。没有必要的类型检查和类型转换。

          我不知道性能差异。

          This questions 说一下 List 和 LinkedList 的区别。

          【讨论】:

            【解决方案8】:

            如前所述,尽可能不要使用ArrayList

            这里是an bit on Wikipedia,关于数组和链表的区别。

            总结:

            数组

            • 快速随机访问
            • 末尾快速插入/删除
            • 良好的内存局部性

            链接列表

            • 开头快速插入/删除
            • 末尾快速插入/删除
            • 中间快速插入/删除(带枚举器)

            【讨论】:

              猜你喜欢
              • 2010-10-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-09-24
              • 2013-03-08
              • 1970-01-01
              • 2021-04-16
              相关资源
              最近更新 更多