哪个更好用数组或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
)中提供所需的估计(或最大)元素数,这将是基础数组的初始大小。
当您Add()
项目并且此项目没有空间时,基础数组将复制到大小加倍的新数组。
我做了什么:当我知道集合的确切大小并且我知道我不会改变集合的大小时,我使用一个数组( String[]
)。 否则我使用List
。
顺便说一句,这适用于任何类型而不仅仅是String
。
这取决于使用场景,但它也是一个微优化,直到您通过分析确定了瓶颈。 使用最适合用途的任何东西。
在大多数情况下使用List <>,不要担心性能。 您很有可能会完成整个职业生涯,并且无需通过将List <>转换为数组来进行性能调整。
在大多数情况下,性能差异并不明显,所以我会使用List
因为它提供了更多在不同情况下有用的function。
如果您不知道要添加的项目的大小,请始终使用List
不是字符串数组。
如果需要动态resize,请使用List
。
如果您担心性能,那么我建议从List
,看看是否确实存在问题。 它在内部使用数组,所以我认为,在大多数情况下,应该没有性能问题。
如果你有一个静态大小的集合,你仍然可以使用string[]
。
当然这取决于你的应用程序,但在情况下List
(甚至只是IEnumerable
更可取。