C#中的集合接口:
IEnumerable
IEnumerable<T>
ICollection
ICollection<T>
IDictionary
IDictionary<T>
IList
IList<T>
集合接口的关系
interface IEnumerable<outT> : IEnumerable
interface ICollection : IEnumerable
interface ICollection<T> : IEnumerable<T>, IEnumerable
interface IDictionary : ICollection, IEnumerable
interface IDictionary<TKey, TValue> : ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable
interface IList : ICollection, IEnumerable
interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable
泛型被引用进来后,之前的集合类就可以使用泛型类来替换,我们来看看对应的替换关系
ArrayList集合类---->List<T>
Hashtable集合类--->Dictionary<TKey,TValue>
Queue--->Queue<T>
Stack--->Stack<T>
泛型类引进来的好处是它是类型安全的,泛型集合类分两类,一类是键值对集合,另一类是不通过Key操作的集合键值对集合
Dictionary<TKey,TValue>
优点:查找插入速度快
缺点:数据无序,如果要按指定顺序来遍历,则缺点明显
SortedDictionary<TKey,TValue>按照Key进行了排序的集合,查找遍历方便
SortedList<TKey,TValue>数据实际存储在数组中,所以添加或删除元素时,要移动的元素可能很多,但是查找较快,所以对于不需要要过来的添加或删除,而且按一定的顺序遍历的集合,可以使用SortedList.
非键值对集合类
List<T>内部实际是一个数组,默认长度为4,当元素超过4个后,会以2倍的长度进行扩展,并建立新数组,把之前的数组元素拷贝到新数组中,所以如果知道长度,最好提前定义长度,以免频繁的创建拷贝数组,可以使用下标访问
LinkedList<T>内部维护的是一个双向链表结构,所以对于添加或删除元素操作比较方便,如果操作数据频繁,可以使用这个集合类
Hashset<T>有数据唯一性特征的无序集合类,不支持下标访问,使用foreach进行遍历
Sortedset<T>按数据类型进行排序的数据唯一的集合类
Stack<T>栈集合,后进先出,不支持下标访问
Queue<T>队列集合,先进先出,不支持下标访问