使用数组和列表<>哪个更好?

发布于 2024-09-04 05:38:31 字数 155 浏览 5 评论 0 原文

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

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

使用每种方法的优点/缺点是什么?

列表是新数组吗?

I was wondering which type would have better performance and which you think should be used.

For example I have a List of strings not knowing how many items I will need so having the .Add(String) function is really convenient. I can Add new strings to the list at any time easily.

What are the advantages/disadvantages of using each?

Are lists the new arrays?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

数理化全能战士 2024-09-11 05:38:31

正确回答这个问题确实需要更多上下文:

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

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

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

  • 如果您需要索引访问并知道最终大小,请使用T[]List< T>
  • 如果您需要索引访问并且不知道最终大小,请使用 List
  • 如果您计划以 LIFO 模式访问元素,请使用 Stack
  • 如果您打算访问 FIFO 模式中的元素,请使用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.

  • If the collection should not be changed by the outside world, use IEnumerable<T>.
  • If the collection will be changed by the outside world, use ICollection<T>.
  • If indexed access is required, use IList<T>.

In a private implementation, it's not as important to use the abstract types:

  • If you need indexed access and know the final size, use T[] or List<T>.
  • If you need indexed access and don't know the final size, use List<T>.
  • If you plan to access elements in a LIFO pattern, use Stack<T>.
  • If you plan to access elements in a FIFO pattern, use Queue<T>.
  • If you need to access elements at the beginning and end of the list, but not in the middle, use LinkedList<T>.
  • If you don't want duplicates, use HashSet<T>.

In .NET 4.0 you have a few more choices, but those are the basics.

韵柒 2024-09-11 05:38:31

List 使用数组 String[] 实现。

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

您可以在容量构造函数参数中给出您期望的估计(或最大)元素数量(new List(10)),这将是底层数组的初始大小。

当您 Add() 一个项目并且没有空间容纳该项目时,基础数组将被复制到一个双倍大小的新数组中。

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

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

List<String> is implemented using an array String[].

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 a List<String>.

By the way, this goes for any type and not just String.

怀念你的温柔 2024-09-11 05:38:31

这取决于使用场景,但在您通过分析确定瓶颈之前,这​​也是一种微观优化。使用最适合用途的东西。

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.

北斗星光 2024-09-11 05:38:31

使用列表<>在大多数情况下,不用担心性能。您很有可能在整个职业生涯中都不需要通过将 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.

韶华倾负 2024-09-11 05:38:31

在大多数情况下,性能差异并不明显,因此我会使用 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.

茶底世界 2024-09-11 05:38:31

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

If you don't know the size of items to be added, always go for List<string> than string array.

羅雙樹 2024-09-11 05:38:31

如果您需要动态调整大小,请使用 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[].

杯别 2024-09-11 05:38:31

当然,这取决于您的应用程序,但在某些情况下 List (甚至只是 IEnumerable 是更好的选择。

Of course it depends on your application, but in circumstances List<string> (or even just IEnumerable<string> is preferable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文