使用数组和列表<>哪个更好?
我想知道哪种类型的性能更好以及您认为应该使用哪种类型。
例如,我有一个字符串列表,不知道我需要多少个项目,因此使用 .Add(String) 函数非常方便。我可以随时轻松地将新字符串添加到列表中。
使用每种方法的优点/缺点是什么?
列表是新数组吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
正确回答这个问题确实需要更多上下文:
在公共 API 中,您应该尝试使用抽象集合类型,以便稍后可以根据需要更改内部实现。
IEnumerable
。ICollection
。IList
。在私有实现中,使用抽象类型并不那么重要:
T[]
或List< T>
。List
。Stack
。Queue
。LinkedList
。HashSet
。在 .NET 4.0 中,您还有更多选择,但这些都是基础。
More context is really required to answer the question properly:
In a public API, you should try to use abstract collection types, so that you can change the internal implementation later if you need to.
IEnumerable<T>
.ICollection<T>
.IList<T>
.In a private implementation, it's not as important to use the abstract types:
T[]
orList<T>
.List<T>
.Stack<T>
.Queue<T>
.LinkedList<T>
.HashSet<T>
.In .NET 4.0 you have a few more choices, but those are the basics.
List
使用数组String[]
实现。如果您不知道将拥有多少个元素,请使用
List
您可以在容量构造函数参数中给出您期望的估计(或最大)元素数量(
new List(10)
),这将是底层数组的初始大小。当您
Add()
一个项目并且没有空间容纳该项目时,基础数组将被复制到一个双倍大小的新数组中。我做什么:当我知道集合的确切大小并且知道我不会更改集合的大小时,我使用数组 (
String[]
)。否则我使用List
。顺便说一句,这适用于任何类型,而不仅仅是
String
。List<String>
is implemented using an arrayString[]
.If you don't know how many elements you'll have, use
List<String>
You can give the estimated (or maximum) number of elements you expect in the capacity constructor parameter (
new List<String>(10)
), this will be the initial size of the underlying array.When you
Add()
an item and there is no room for this item, the underlying array is copied to a new array of double the size.What I do: when I know the exact size of the collection and I know I won't change the size of the collection, I use an array (
String[]
). Otherwise I use aList<String>
.By the way, this goes for any type and not just
String
.这取决于使用场景,但在您通过分析确定瓶颈之前,这也是一种微观优化。使用最适合用途的东西。
It depends on usage scenario, BUT it's also a micro-optimisation until you have identified a bottleneck by profiling. Use whatever fits the usage best.
使用列表<>在大多数情况下,不用担心性能。您很有可能在整个职业生涯中都不需要通过将 List<> 转换为性能调整。到一个数组中。
Use List<> in most all cases, and don't worry about performance. There is a good chance you will go through your entire career and never need to performance tune by converting a List<> into an array.
在大多数情况下,性能差异并不明显,因此我会使用
List
因为它提供了更多在不同情况下有用的功能。In most scenarios the performance difference is not appreciable so I would use
List<string>
since it provides much more functionality that could be useful in different situations.如果您不知道要添加的项目的大小,请始终选择
List
而不是字符串数组。If you don't know the size of items to be added, always go for
List<string>
than string array.如果您需要动态调整大小,请使用
List
。如果您担心性能,那么我建议从
List
开始,看看是否确实存在问题。它在内部使用数组,所以我认为,在大多数情况下,应该不存在性能问题。如果您有一个静态大小的集合,您仍然可以使用
string[]
。If you need dynamic sizing, then go with
List<string>
.If you're worried about performance, then I would suggest starting with
List<string>
and see if there's really an issue. It uses arrays internally so I would think, for the most part, there should be no performance issues.If you have a staticly sized collection, you could still use
string[]
.当然,这取决于您的应用程序,但在某些情况下
List
(甚至只是IEnumerable
是更好的选择。Of course it depends on your application, but in circumstances
List<string>
(or even justIEnumerable<string>
is preferable.