C#中好像有很多不同的列表。我能够想到一些,但我相信还有很多更多。
List<String> Types = new List<String>();
ArrayList Types2 = new ArrayList();
LinkedList<String> Types4 = new LinkedList<String>();
我的问题是什么时候使用其中一种更有益?
更具体地说,我从函数返回未知大小的列表,想知道是否有一个特定的列表在这方面表现更好。
List<String> Types = new List<String>();
LinkedList<String> Types4 = new LinkedList<String>();
99%的情况下,List是你想要的。无论如何都要避免使用非通用集合。
LinkedList对于添加或删除而不必打乱项非常有用,尽管由此放弃了随机访问。它有一个优点是可以在迭代节点时删除项目。
ArrayList是泛型出现之前的遗留物。实际上没有必要使用它们…它们比List<>慢,占用更多内存。通常情况下,除非您在非常大的列表中间插入元素,否则也没有理由使用LinkedList。
.NET中唯一比List<>更快的东西是固定数组…但性能差异令人惊讶地小。
通常使用List。不要使用ArrayList,因为它已经过时了。在需要能够添加而无需调整大小且不介意开销和随机访问损失的罕见情况下,请使用LinkedList。
ArrayList 是 .Net 1.0 的列表类型。 List 是在 .Net 2.0 中引入泛型后的通用列表。
泛型列表提供更好的编译时支持。泛型列表是类型安全的。您不能添加错误类型的对象。因此,您知道存储的对象的类型。没有类型检查和类型转换是必要的。
我不知道性能差异。
这个问题说了一些关于 List 和 LinkedList 的区别。
如上所述,尽可能不要使用ArrayList
。
这里有一篇关于数组和链表之间差异的维基百科文章。
总结:
ArrayList 可能在内存方面更小,因为它基于数组。它还可以快速随机访问元素。但是,添加或删除列表将需要更长的时间。如果对象过度分配并假定您将继续添加,这可能会稍微加快速度。 (当然,这将减少内存优势。)
其他列表将稍微大一些(每个元素多4到8个字节的内存),并且具有较差的随机访问时间。但是,向列表末尾添加或删除对象非常快。此外,内存使用通常非常精准地符合您的需求。