C#中集合的使用

来源:互联网 发布:淘宝天猫内部优惠券平台 编辑:程序博客网 时间:2024/05/29 07:52

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>队列集合,先进先出,不支持下标访问