| 3)Hashtable
 实现了接口:IDictionary、ICollection、IEnumerable
 可以向Hashtable中自由添加和删除元素,有些像ArrayList,但没有那么大的性能开销
 
 4)SortedList
 实现了接口:IDictionary、ICollection、IEnumerable
 SortedLIst兼顾了ArrayList和Hashtable的优点,可按键值来排序
 
 5)Queue
 实现了接口:ICollection、IEnumerable
 Queque是队列,先进先出的访问各个元素
 可以调用Queque对象的GetEnumerator()方法,得到IEnumerator对象,来遍历队列中的各个元素
 
 6)Stack
 实现了接口:ICollection、IEnumerable
 Stack是堆栈,后进先出的访问各个元素
 可以调用Stack对象的GetEnumerator()方法,得到IEnumerator对象,来遍历堆栈中的各个元素
 
 
 3.上面提到的几种集合类,他们都是通用的集合类,他们所接受的元素大都是Object类型,当对象放入
 了集合之后,都失去了原有的类型信息-即这些通用集合类都不是强类型的
 解决办法是使用强类型的集合类
 System.Collections命名空间下的CollectionBase,DictionaryBase,ReadOnlyCollectionBase 类
 System.Collections.Specialized命名空间下的一些类可以满足要求,可以直接使用也可以继承
 4.集合性能
 许多集合类都提供了相同的功能,例如,SortedList与SortedDictionary的功能几乎完全相同。但是,其性能常常有很大区别。一个集合使用的内存少,另一个集合的元素检索速度快。在MSDN文档中,集合的方法常常有性能提示:O(1),时间与操作项时间一致。O(log n)
 随集合中元素的增加而增加,每个元素需要增加的时间不是线性的,而是呈对数曲线。
 集合                   Add                    Insert          Remove          Item           Sort                   Find
 List<T>   如果集合必须重置大小        O(n)              O(n)             O(1)       O(n log n),            O(n)
 ,就是O(1)或O(n)                                                                    最坏情况O(n^2)
 Stack<T>Push(),如果窄必须重置                        Pop(),O(1)
 大小 ,就是O(1)或O(n)
 Queue<T>Enqueue(),如果队列必须                    Dequeue(),
 重置大小,就是O(1)或O(n)                     O(1)
 HashSet<T>如果集必须重置大小,   Add()             O(1)
 就是O(1)或O(n)             O(1)或O(n)
 LinkedList<T>AddLast()               AddAfter()      O(1)                                                        O(n)
 Dictionary      O(1)                                              O(1)           O(1)
 <TKey,TValue>
 SortedDictionary
 <TKey,TValue> O(log n)                                     O(log n)    O(log n)
 SortedList                                                          O(n)          读写是O(log n),如果
 <TKey,Tvalue>                                                                   键在列表中,就是O(logn);
 如果键不在列表中,就是O(n)
 |