.net集合类型使用选择
我们在做开发的时候,常常会使用到集合类型,常见的集合类型有Array、Queue、Stack、ArrayList、StringCollection、Hashtable、SortedList、ListDictionary等等。
选择需要使用的类型的时候,我们需要分析清楚一下情况:
只作为简单的固定类型数据集合使用,不需要任何额外功能?
Array是首选,即我们常用的的int[],string[]等。
是否需要一个序列列表,其中的元素通常在检索其值后被放弃?
如果需要,那么在需要先进先出 (FIFO) 行为时请考虑使用 Queue 类或 Queue 泛型类。在需要后进先出 (LIFO) 行为时请考虑使用 Stack 类或 Stack 泛型类。
如果不需要,请考虑使用其他集合。
是否需要以某种顺序访问元素,例如 FIFO、LIFO 或随机访问?
Queue 类和 Queue 泛型类提供 FIFO 访问。
Stack 类和 Stack 泛型类提供 LIFO 访问。
LinkedList 泛型类允许从开头到末尾或从末尾到开头按顺序访问。
其余的集合提供随机访问。
是否需要通过索引访问每一元素?
ArrayList 和 StringCollection 类以及 List 泛型类通过元素的从零开始的索引提供对元素的访问。
Hashtable、SortedList、ListDictionary 和 StringDictionary 类以及 Dictionary 和 SortedDictionary 泛型类通过元素的键提供对元素的访问。
NameObjectCollectionBase 和 NameValueCollection 类以及 KeyedCollection 和 SortedList 泛型类通过其元素的从零开始的索引或者通过其元素的键提供对元素的访问。
每一元素将包含一个值、一个键和一个值的组合还是一个键和多个值的组合?
一个值:使用任何基于 IList 接口或 IList 泛型接口的集合。
一个键和一个值:使用任何基于 IDictionary 接口或 IDictionary 泛型接口的集合。
带有嵌入的键的一个值:使用 KeyedCollection 泛型类。
一个键和多个值:使用 NameValueCollection 类。
是否需要用与输入元素方式不同的方式对元素排序?
Hashtable 类按其元素的哈希代码对元素排序。
SortedList 类以及 SortedDictionary 和 SortedList 泛型类根据 IComparer 接口和 IComparer 泛型接口的实现按键对元素排序。
ArrayList 提供 Sort 方法,该方法接受 IComparer 实现作为参数。其对应的泛型类(List 泛型类)提供 Sort 方法,该方法接受 IComparer 泛型接口的实现作为参数。
是否需要信息的快速搜索和检索?
对于小集合(10 项或更少),ListDictionary 比 Hashtable 快。SortedDictionary 泛型类提供比 Dictionary 泛型类更快的查找。
是否需要只接受字符串的集合?
StringCollection(基于 IList)和 StringDictionary(基于 IDictionary)都位于 System.Collections.Specialized 命名空间中。
此外,通过为泛型类型参数指定 String 类,可以使用 System.Collections.Generic 命名空间中的任何泛型集合类作为强类型字符串集合。
注:文章内容转自MSDN(http://msdn.microsoft.com/zh-cn/library/6tc79sx1(v=vs.80).aspx)