c#中经常使用集合类和集合接口之集合类系列【转】

经常使用集合接口系列:http://www.cnblogs.com/fengxiaojiu/p/7997704.htmlhtml

经常使用集合类系列:http://www.cnblogs.com/fengxiaojiu/p/7997541.html算法

经常使用集合类:数组

数组(Array)的不足(即:集合与数组的区别)缓存

1. 数组是固定大小的,不能伸缩。虽然System.Array.Resize这个泛型方法能够重置数组大小,可是该方法是从新建立新设置大小的数组,用的是旧数组的元素初始化。随后之前的数组就废弃!而集合倒是可变长的。安全

2. 数组要声明元素的类型,集合类的元素类型倒是object。多线程

3. 数组可读可写不能声明只读数组。集合类能够提供ReadOnly方法以只读方式使用集合。函数

4. 数组要有整数下标才能访问特定的元素,然而不少时候这样的下标并非颇有用。集合也是数据列表却不使用下标访问。不少时候集合有定制的下标类型,对于队列和栈根本就不支持下标访问!性能

数组列表(ArrayList)spa

ArrayList能够存储任何类型,不像List泛型那样有严格要求,List<T>更有效,ArrayList就至关因而List<object>。线程

ArrayList类对象被设计成为一个动态数组类型,其容量会随着须要而适当的扩充方法:

1:Add()向数组中添加一个元素

2:Remove()删除数组中的一个元素

3:RemoveAt(int i)删除数组中索引值为i的元素

4:Reverse()反转数组的元素

5:Sort()以从小到大的顺序排列数组的元素

6:Clone()复制一个数组

System.Collections命名空间包含接口和类,这些接口和类定义各类对象(如列表、队列、位数组、哈希表和字典)的集合。System.Collections.Generic 命名空间包含定义泛型集合的接口和类,泛型集合容许用户建立强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能。System.Collections.Specialized 命名空间包含专用的和强类型的集合,例如,连接的列表词典、位向量以及只包含字符串的集合。

列表(List)

可经过索引访问的对象的强类型列表。提供用于对列表进行搜索、排序和操做的方法,在决定使用List仍是使用ArrayList类(二者具备相似的功能)时,记住List类在大多数状况下执行得更好而且是类型安全的。若是对List类的类型T使用引用类型,则两个类的行为是彻底相同的。可是若是对类型T使用值类型,则须要考虑实现和装箱问题。

若是对类型T使用值类型,则编译器将特别针对该值类型生成List类的实现。这意味着没必要对List对象的列表元素进行装箱就可使用该元素,而且在建立大约500个列表元素以后,不对列表元素装箱所节省的内存将大于生成该类实现所使用的内存。

哈希表(HashTable)

1、哈希表(Hashtable)简述

在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现相似key/value的键值对,其中key一般可用来快速查找,同时key是区分大小写;

value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,因此Hashtable能够支持任何类型的key/value键值对.

2、哈希表的简单操做

在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value);

在哈希表中去除某个key/value键值对:HashtableObject.Remove(key);

从哈希表中移除全部元素:HashtableObject.Clear();

判断哈希表是否包含特定键key:HashtableObject.Contains(key);

字典(Directonary)

Hashtable和Dictionary<K, V>类型
 1:单线程中推荐使用Dictionary,有泛型优点,且读取速度较快,容量利用更充分.
 2:多线程中推荐使用Hashtable,默认Hashtable容许单线程写入, 多线程读取对Hashtable进一步调用Synchronized()方法能够得到彻底线程安全的类型,而Dictionary非线程安全,必须人为使用lock语句进行保护, 效率大减。
 3:Dictionary有按插入顺序排列数据的特性(注:但当调用Remove()删除过节点后顺序被打乱), 所以在须要体现顺序的情境中使用Dictionary能得到必定方便。

HashTable应用场合:作对象缓存,树递归算法的替代,和各类需提高效率的场合。HashTable中的key/value均为object类型,由包含集合元素的存储桶组成。存储桶是 HashTable中各元素的虚拟子组,与大多数集合中进行的搜索和检索相比,存储桶可令搜索和检索更为便捷。每一存储桶都与一个哈希代码关联,该哈希代码是使用哈希函数生成的并基于该元素的键。HashTable的优势就在于其索引的方式,速度很是快。若是以任意类型键值访问其中元素会快于其余集合,特别是当数据量特别大的时候,效率差异尤为大。

排序列表(SortedList)

与哈希表相似,区别在于SortedList中的Key数组排好序的

名-值集合(NameValueCollection)

NameValueCollection与HashTable很相似,可是他们仍是有区别的,HashTable 的KEY是惟一性,而NameValueCollection则不惟一

堆栈(Stack)

表示对象的简单的后进先出非泛型集合。Push方法入栈,Pop方法出栈

队列(Queue)

队列先进先出,enqueue方法入队列,dequeue方法出队列

相关文章
相关标签/搜索