c#中常用集合類和集合介面之集合類系列,
常用集合類:
數組(Array)的不足(即:集合與數組的區別)
1. 數組是固定大小的,不能伸縮。雖然System.Array.Resize這個泛型方法可以重設數組大小,但是該方法是重新建立新設定大小的數組,用的是舊數組的元素初始化。隨後以前的數組就廢棄!而集合卻是可變長的。
2. 數組要聲明元素的類型,集合類的元素類型卻是object。
3. 數組可讀可寫不能聲明唯讀數組。集合類可以提供ReadOnly方法以唯讀方式使用集合。
4. 數組要有整數下標才能訪問特定的元素,然而很多時候這樣的下標並不是很有用。集合也是資料列表卻不使用下標訪問。很多時候集合有定製的下標類型,對於隊列和棧根本就不支援下標訪問!
數組列表(ArrayList)
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)
一、雜湊表(Hashtable)簡述
在.NET Framework中,Hashtable是System.Collections命名空間提供的一個容器,用於處理和表現類似key/value的索引值對,其中key通常可用來快速尋找,同時key是區分大小寫;
value用於儲存對應於key的值。Hashtable中key/value索引值對均為object類型,所以Hashtable可以支援任何類型的key/value索引值對.
二、雜湊表的簡單操作
在雜湊表中添加一個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方法出隊列
常用集合介面系列:http://www.cnblogs.com/fengxiaojiu/p/7997704.html
常用集合類系列:http://www.cnblogs.com/fengxiaojiu/p/7997541.html