天天看點

.Net中的集合類

8月5日

.Net中的集合類

轉: http://blog.csdn.net/chengking/archive/2005/08/27/466286.aspx .Net中的集合類

.NetFramework提供了很多集合類,你有沒有都使用過它們呢?

下面以總結的形式歸納一下它們.

((I)).集合類型

1.一般集合

I.Array

a.Array中的秩是Array中的維數.一個Array可以有一個或多個秩.

Array具有固定的容量.如果有可變容量,則用Array.CreateInstance,其可以不從零開始存儲.

II.ArrayList集合類型

a.是數組的複雜版本.Array是數組是固定的,而ArrayList類是根據需要自動擴充的.如果更改了Array.Capacity屬性的值,則自動進行記憶體重新配置設定和元素複制.

b.ArrayList提供添加/或移除某一範圍元素的方法.在Array中,隻能一次擷取或設定一個元素的值.

c.使用Synchronized方法可以很容易地建立ArrayList的同步版本.而Array将一直保持它,直到使用者實作同步為止.

d.ArrayList提供将隻讀和固定大小包裝傳回到集合的方法.而Array不提供.

e.Array提供ArrayList所不具有的某些靈活性.

I.可以設定Array的下限,但ArrayList的下限始終為零.

II.Array可以具有多個次元,而ArrayList始終是唯一的.

III.Array是特定類型(不是Object),比ArrayList性能好.ArrayList在存儲和檢索時經常發生拆箱和裝箱操作現象.

III.哈希表集合

a.Hashtable類基于IDictionary接口,是以該集合中的每一進制素是鍵和值對.

b.Object.GetHashCode方法為其自身生成哈希代碼.還可以通過使用Hashtable構造函數,為所有元素指定一個哈希函數.

IV.SortedList集合類型

a.SortedList類類似于Hashtable和ArrayList間的混合.

b.SortedList的每一進制素都是鍵對值,提供隻傳回鍵清單或隻傳回值清單的方法.

c.如果想要一個保留鍵和值的集合,并且還需要索引的靈活性,則使用SortList.

V.隊列集合類型

a.如果需要以資訊在集合中存儲的相同順序來通路這些資訊,請使用Queue.

b.Enqueue将一個元素添加到Queue的隊尾.Dequeue從Queue處移除最舊的元素.Peek從Queue的開始處傳回最舊的元素,但不将從Queue中移除.

VI.堆棧集合類型

a.如果需要以資訊在集合中存儲的相反順序來通路這些資訊,請使用Queue.

b.Push在Stack的頂部插入一個元素.Pop在Stack的頂部移除一個元素.Peek傳回處于Stack頂部的元素,但不将其從棧頂上移除.

2.位集合

I.BitArray

a.BitArray是一個集合類,容量與計數相同.通過增加Length屬性來将元素添加到BitArray中;通過降低Length屬性将元素删除.

b.獨特方法,如And/Or/Xor/Not/SetAll.

c.位于System.Collections中.

II.BitVector32

a.速度快,精确存儲32位,并且同時存儲标志位和小整數.

b.位于System.Collections.Specialized中.

3.專用集合

I.NameValueCollection

a.基于NameObjectCollectionBase,但NameValueCollection可以接受每個鍵多個值,而NameObjectCollectionBase接受每個鍵,但隻有一個值.

((2)).選擇用哪種集合

***Queue或Stack:需要一個序列清單,其中的元素在檢索後放棄.否則,用其它集合.

***Queue或Stack:按一定的順序通路這些元素(先進先出,後進先出),如果随機,用其它集合.

***是否通過索引通路每一個元素?

*ArrayList和StringCollection提供通過元素的從零開始的*索引*對其元素進行通路.

*(Hashtable)(SortedList)(ListDictionary)(StringDictionary)提供通過元素的*鍵*對其元素進行通路

*(NameObjectCollectionBase)和(NameValueCollection)提供或者通過元素的從零開始的*索引*或者通過元素的*鍵*對其元素進行通路.

***每一進制素将包含一個值/一個值和一個鍵的組合還是一個鍵和多個值的組合?

*一個值:使用基于IList的任何集合

*一個鍵和一個值:使用基于IDictionary的任何集合.

*一個鍵和多個值:使用System.Collections.Specialized命名空間中的NameValueCollection類.

***是否需要用與元素方式不同的方式對元素排序?

*Hashtable通過鍵的哈希代碼對元素進行排序.

*SortedList基于IComparer實作,通過鍵對元素進行排序.

*ArrayList提供Sort方法該方法将IComparer實作作為一個參數采用.

***是否需要資訊的快速搜尋和檢索?

*對于小集合(十項或更少),ListDictionary快于Hashtable.

***是否需要隻接受字元串的集合?

*StringCollection(基于IList)和StringDictionary(基于IDictionary)位于System.Collections.Specialized命名空間中.

((3)).強類型集合

強類型集合類與上面講的集合特性差不多一樣,基本上都是一一對應的關系,隻不過是強類型;并且命名空間在System.Collection.Generic下面. 不需要自定義強制類型集合,可以直接調用System.Collection.Generic命名空間下面的類

這裡就不作多說.這裡隻保留了個以前講課時的PPT.

1. 幻燈片課程 下載下傳 : http://www.cnblogs.com/Files/ChengKing/Asp.net%202.0%20Collection%20Study(ppt).rar 2. 示例代碼 下載下傳 : http://www.cnblogs.com/Files/ChengKing/Collection(DonNet%202.0)(project).rar