哪个更好用数组或List <>?

Gag*_*age 25 .net c# collections performance

我想知道哪种类型会有更好的性能以及您认为应该使用哪种类型.

例如,我有一个字符串列表,不知道我需要多少项,因此.Add(String)函数非常方便.我可以随时轻松地将新字符串添加到列表中.

使用每个的优点/缺点是什么?

列出新阵列?

Aar*_*ght 36

真正需要更多背景来正确回答这个问题:

公共API中,您应该尝试使用抽象集合类型,以便以后可以根据需要更改内部实现.

  • 如果外部世界不应更改该集合,请使用IEnumerable<T>.
  • 如果收藏被外界改变,请使用ICollection<T>.
  • 如果需要索引访问,请使用IList<T>.

私有实现中,使用抽象类型并不重要:

  • 如果您需要索引访问并知道最终大小,请使用T[]List<T>.
  • 如果您需要索引访问并且不知道最终大小,请使用List<T>.
  • 如果您计划以LIFO模式访问元素,请使用Stack<T>.
  • 如果您计划访问FIFO模式中的元素,请使用Queue<T>.
  • 如果您需要访问列表开头和结尾的元素,而不是中间的元素,请使用LinkedList<T>.
  • 如果您不想要重复,请使用HashSet<T>.

在.NET 4.0中,您有更多选择,但这些是基础知识.


bri*_*ner 22

List<String>是使用数组实现的String[].

如果你不知道你将拥有多少元素,请使用 List<String>

您可以在容量构造函数参数(new List<String>(10))中给出预期的估计(或最大)元素数,这将是基础数组的初始大小.

如果您有Add()一个项目且该项目没有空间,则将基础数组复制到大小加倍的新数组.

我做什么:当我知道集合的确切大小,我知道我不会改变集合的大小,我使用数组(String[]).否则我用了List<String>.

顺便说一句,这适用于任何类型,而不仅仅是String.


Mit*_*eat 7

这取决于使用场景,但它也是一个微优化,直到您通过分析确定了瓶颈.使用最适合用途的任何东西.