我想知道哪种类型会有更好的性能以及您认为应该使用哪种类型。
例如,我有一个字符串列表,不知道我需要多少项,因此.Add(String)函数非常方便。我可以随时轻松地将新字符串添加到列表中。
使用每种产品有哪些优点/缺点?
列出新阵列吗?
答案 0 :(得分:36)
确实需要更多背景来正确回答这个问题:
在公共API 中,您应该尝试使用抽象集合类型,以便以后可以根据需要更改内部实现。
IEnumerable<T>
。ICollection<T>
。IList<T>
。在私有实现中,使用抽象类型并不重要:
T[]
或List<T>
。List<T>
。Stack<T>
。Queue<T>
。LinkedList<T>
。HashSet<T>
。在.NET 4.0中,您还有其他一些选择,但这些是基础知识。
答案 1 :(得分:22)
List<String>
是使用数组String[]
实现的。
如果您不知道自己有多少元素,请使用List<String>
您可以在容量构造函数参数(new List<String>(10)
)中提供所需的估计(或最大)元素数,这将是基础数组的初始大小。
当你Add()
一个项目并且该项目没有空间时,底层数组将被复制到一个大小翻倍的新数组。
我的所作所为:当我知道集合的确切大小并且我知道我不会更改集合的大小时,我使用数组(String[]
)。否则我使用List<String>
。
顺便说一句,这适用于任何类型,而不仅仅是String
。
答案 2 :(得分:7)
这取决于使用情况,但它也是一个微优化,直到您通过分析确定了瓶颈。使用最适合用途的任何东西。
答案 3 :(得分:3)
使用列表&lt;&gt;在大多数情况下,并不担心性能。很有可能你将完成整个职业生涯,并且永远不需要通过转换List&lt;&gt;来进行表现调整。成阵列。
答案 4 :(得分:3)
在大多数情况下,性能差异并不明显,因此我会使用List<string>
,因为它提供了更多在不同情况下有用的功能。
答案 5 :(得分:2)
如果您不知道要添加的项目的大小,请始终使用List<string>
而不是字符串数组。
答案 6 :(得分:2)
如果您需要动态调整大小,请使用List<string>
。
如果你担心表现,那么我建议从List<string>
开始,看看是否真的存在问题。它在内部使用数组,所以我认为,在大多数情况下,应该没有性能问题。
如果您有一个静态大小的集合,您仍然可以使用string[]
。
答案 7 :(得分:2)
当然,这取决于您的申请,但在List<string>
(或者甚至只是IEnumerable<string>
的情况下更可取。