經常使用集合接口系列: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方法出隊列