ASP.NET C#中的列表,哪些时候使用?

6

C#中好像有很多不同的列表。我能够想到一些,但我相信还有很多更多。

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

我的问题是什么时候使用其中一种更有益?

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

8个回答

2
List<String> Types = new List<String>();
LinkedList<String> Types4 = new LinkedList<String>();
  • 泛型列表是指您定义放入其中的数据类型,这减少了装箱和拆箱。
  • 关于列表和链表的区别,请参见此处 --> 何时应使用List vs LinkedList
  • ArrayList是一种非泛型集合,可用于存储任何类型的数据类型。

列表也可以用于存储任何类型的数据,因此这是一个误导性的答案。列表可以针对类型或对象进行专门化。 - Steven Sudit

2

99%的情况下,List是你想要的。无论如何都要避免使用非通用集合。

LinkedList对于添加或删除而不必打乱项非常有用,尽管由此放弃了随机访问。它有一个优点是可以在迭代节点时删除项目。


2

ArrayList是泛型出现之前的遗留物。实际上没有必要使用它们…它们比List<>慢,占用更多内存。通常情况下,除非您在非常大的列表中间插入元素,否则也没有理由使用LinkedList。

.NET中唯一比List<>更快的东西是固定数组…但性能差异令人惊讶地小。


1

通常使用List。不要使用ArrayList,因为它已经过时了。在需要能够添加而无需调整大小且不介意开销和随机访问损失的罕见情况下,请使用LinkedList。


我将得出结论,这是战略投票的一个例子。多么有趣。 - Steven Sudit

1
请参阅 MSDN 上关于常用集合类型的文章,以获取可用于您的各种集合类型及其预期用途的列表。

1

ArrayList 是 .Net 1.0 的列表类型。 List 是在 .Net 2.0 中引入泛型后的通用列表。

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

我不知道性能差异。

这个问题说了一些关于 List 和 LinkedList 的区别。


1

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

这里有一篇关于数组和链表之间差异的维基百科文章

总结:

数组

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

链表

  • 快速在开头插入/删除
  • 快速在末尾插入/删除
  • 通过枚举器快速在中间插入/删除

-2

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

其他列表将稍微大一些(每个元素多4到8个字节的内存),并且具有较差的随机访问时间。但是,向列表末尾添加或删除对象非常快。此外,内存使用通常非常精准地符合您的需求。


实际上,ArrayList 通常比较大,因为它基本上是一个对象数组(至少对于任何非微小的列表而言)。 - Beep beep
@LuckyLindy:模板列表确实更好。但是,除非您存储简单的整数或浮点数,否则数组的内存不会显着增加。其他所有内容都来自对象。 - Christopher
LuckyLindy是正确的:ArrayList不会更小,但通常会更大。 - Steven Sudit
所有对象都是从 Object 派生的;我认为你的意思是不从 ValueType 派生的对象不需要装箱。这是正确的,因此大小优势仅适用于值类型。 - Steven Sudit
@Christopher,你原来的回答说ArrayList更小,随机访问时间更好。我相信已经解释了这是不正确的。 - Steven Sudit
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接