哪个更好用数组或List ?

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

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

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

列出新arrays?

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

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

  • 如果外部世界不应更改集合,请使用IEnumerable
  • 如果外部世界更改集合,请使用ICollection
  • 如果需要索引访问,请使用IList

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

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

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

List使用数组String[]

如果您不知道有多少元素,请使用List

您可以在容量构造函数参数( new List(10) )中提供所需的估计(或最大)元素数,这将是基础数组的初始大小。

当您Add()项目并且此项目没有空间时,基础数组将复制到大小加倍的新数组。

我做了什么:当我知道集合的确切大小并且我知道我不会改变集合的大小时,我使用一个数组( String[] )。 否则我使用List

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

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

在大多数情况下使用List <>,不要担心性能。 您很有可能会完成整个职业生涯,并且无需通过将List <>转换为数组来进行性能调整。

在大多数情况下,性能差异并不明显,所以我会使用List因为它提供了更多在不同情况下有用的function。

如果您不知道要添加的项目的大小,请始终使用List不是字符串数组。

如果需要动态resize,请使用List

如果您担心性能,那么我建议从List ,看看是否确实存在问题。 它在内部使用数组,所以我认为,在大多数情况下,应该没有性能问题。

如果你有一个静态大小的集合,你仍然可以使用string[]

当然这取决于你的应用程序,但在情况下List (甚至只是IEnumerable更可取。