C#中集合数据类型的比较

时间:2009-06-15 12:10:00

标签: c# data-structures

有谁知道对不同C#集合类型的概述?我正在寻找能够支持AddRemoveRemoveLast等基本操作并提供相对性能的内容。

对于各种通用类来说会特别有趣 - 如果它显示出来,那就更好了。如果List<T>其中T是一个类,而T是一个结构,那么它的性能会有所不同。

一个开始将是抽象数据结构的一个很好的备忘单,比较链接列表,哈希表等等。谢谢!

2 个答案:

答案 0 :(得分:24)

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

Complexity table

如上图所示,内容最初是作为表格提供的(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)
  • 注意:虽然按顺序访问时间是固定时间,但由于查找密钥的过头,它通常比其他结构慢。

答案 1 :(得分:8)

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

修改:我会专门查看相关部分:Selecting a Collection Class

  

一定要选择你的   System.Collections类仔细。   使用错误的类型可能会限制您的   使用该系列。