【问题标题】:Comparison of collection datatypes in C# [closed]C# 中集合数据类型的比较 [关闭]
【发布时间】:2009-06-15 12:10:00
【问题描述】:

有谁知道不同 C# 集合类型的概述?我正在寻找一些东西来显示支持哪些基本操作,如AddRemoveRemoveLast 等,并给出相对性能。

这对于各种泛型类来说会特别有趣——如果它显示出来就更好了。如果List<T>(其中T 是一个类)和一个T 是一个结构体之间的性能存在差异。

对于抽象数据结构、比较链表、哈希表等,开始会是一个不错的备忘单。谢谢!

【问题讨论】:

  • 对教程等的请求不被视为 SO 的好问题。

标签: c# data-structures


【解决方案1】:

以下内容最初取自 MSDN http://xbox.create.msdn.com/downloads/?id=123&filename=DataStructures_CheatSheet.doc(但链接已失效)。

如上图所示,内容最初是作为表格提供的(StackOverflow 不支持)。

鉴于下面的图像不容易编入索引,将信息以某种粗略的编程方式转换为列表:

数组

  • 添加到结尾: O(n)
  • 从结尾删除: O(n)
  • 插入中间: O(n)
  • 从中间移除: O(n)
  • 随机访问: O(1)
  • 按顺序访问: O(1)
  • 搜索特定元素: O(n)
  • 注意事项: 最有效地利用内存;在数据大小固定的情况下使用。

列表

  • 添加到结尾: best case O(1); worst case O(n)
  • 从结尾删除: O(1)
  • 插入中间: O(n)
  • 从中间移除: O(n)
  • 随机访问: O(1)
  • 按顺序访问: O(1)
  • 搜索特定元素: O(n)
  • 注意: 实施针对速度进行了优化。在许多情况下,List 将是最佳选择。

收藏

  • 添加到结尾: best case O(1); worst case O(n)
  • 从结尾删除: O(1)
  • 插入中间: O(n)
  • 从中间移除: O(n)
  • 随机访问: O(1)
  • 按顺序访问: O(1)
  • 搜索特定元素: O(n)
  • 注意事项:列表是更好的选择,除非公开为 API。

链表

  • 添加到结尾: O(1)
  • 从末尾删除: O(1)
  • 插入中间: O(1)
  • 从中间移除: O(1)
  • 随机访问: O(n)
  • 按顺序访问: O(1)
  • 搜索特定元素: O(n)
  • 注意事项:许多操作速度很快,但要注意缓存一致性。

堆栈

  • 添加到结尾: best case O(1); worst case O(n)
  • 从末尾删除: O(1)
  • 插入中间: N/A
  • 从中间移除: N/A
  • 随机访问: N/A
  • 按顺序访问: N/A
  • 搜索特定元素: N/A
  • 注意事项:不应出于性能原因选择,而是出于算法原因选择。

队列

  • 添加到结尾: best case O(1); worst case O(n)
  • 从结尾删除: O(1)
  • 插入中间: N/A
  • 从中间移除: N/A
  • 随机访问: N/A
  • 按顺序访问: N/A
  • 搜索特定元素: N/A
  • 注意事项:不应出于性能原因选择,而是出于算法原因选择。

字典

  • 添加到结尾: best case O(1); worst case O(n)
  • 从结尾删除: O(1)
  • 插入中间: best case O(1); worst case O(n)
  • 从中间移除: O(1)
  • 随机访问: O(1)*
  • 按顺序访问: O(1)*
  • 搜索特定元素: O(1)
  • 注意:虽然按顺序访问时间是常数时间,但由于查找密钥的开销,它通常比其他结构慢。

【讨论】:

  • 谢谢你,正是我想要的:)
  • 嘿伙计们,该链接似乎不再有效。有谁知道该文件的不同位置/在任何地方都有可用的副本?提前致谢。
  • @JohnLBevan 我已经为你更新了链接。
  • 谢谢@BenjaminDobell;非常感谢。
  • 链接不再有效。
【解决方案2】:

这不是备忘单,但它是开始学习的好地方:Collection Classes (C# Programming Guide)

编辑:我会专门看这个相关部分:Selecting a Collection Class

请务必选择您的 System.Collections 类仔细。 使用错误的类型会限制您的 使用集合。

【讨论】:

  • 这很棒,因为它贯穿所有不同的集合。它包括比其他答案中提到的 creators.xna.com 上的备忘单更多的集合类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-15
  • 2017-06-12
相关资源
最近更新 更多