1. 程式人生 > >c#中常用集合類和集合接口之集合類系列【轉】

c#中常用集合類和集合接口之集合類系列【轉】

arr 關聯 special rect 替代 不能 一個數 lock resize

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

常用集合類系列:http://www.cnblogs.com/fengxiaojiu/p/7997541.html

常用集合類:

數組(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方法出隊列

c#中常用集合類和集合接口之集合類系列【轉】