我们什么时候在.NET中使用所有不同的集合?

时间:2014-08-07 09:56:23

标签: .net collections

在.NET中,我们有很多不同的集合类型。我通常很擅长根据自己的需要选择合适的产品,但我注意到我并不总是考虑其中的所有方面(例如可用性,可维护性,性能)

所以我们什么时候使用:

  • 数组
  • A List
  • 字典
  • A HashTable
  • HashSet
  • 一个LinkedList

为什么?

我希望通过良好的解释进行一些很好的比较(也许还有一些代码,以支持它)。我认为这里有一个胜利(希望我们更多)。

1 个答案:

答案 0 :(得分:4)

每个系列在某些领域表现出色,在其他领域表现不佳。因此,您使用的集合很大程度上取决于程序中的预期用途。

以下是每个集合通常用于的细分。

<强>阵列
var array [] = new T [n] {/ * n elements * /};

  • 索引随机访问集合。
  • 恒定大小的集合(数组生命周期的N个元素)。
  • 有序收集。

<强>列表
var list = new List&lt; T&gt;();
list.Add(默认(T));

  • 索引随机访问集合。
  • 可修改的收集(添加和删除项目)。
  • 有序收集。

<强>词典
var dictionary = new Dictionary&lt; TKey,TValue&gt;();

  • 密钥随机访问集合。
  • 可修改的收集(添加和删除项目)。
  • 通常是时间插入,移除和查找。
  • 无序集合。

<强>哈希表
喜欢Dictionary<TKey, TValue>; HashTable是非通用的Dictionary

<强> HashSet的
var set = new HashSet&lt; T&gt;();
set.Add(默认(T));

  • 不间断查询。
  • 没有要求或设施获取元素,仅用于确定遏制。

<强>链表
var linkedList = new LinkedList&lt; T&gt;();
linkedList.AddAfter(linkedList.First,default(T));

  • 插入和移除恒定时间。
  • 可修改的收集(添加和删除项目)
  • 有序收集。

以上是我所知道的,请不要接受它作为事实并根据上述情况进行自己的研究。如果有任何我错过的内容应该包括在内,请在评论中告诉我。