.Net中的集合類
來源:互聯網
上載者:User
((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://files.cnblogs.com/ChengKing/Asp.net%202.0%20Collection%20Study(ppt).rar
2.
範例程式碼
下載
:
http://files.cnblogs.com/ChengKing/Collection(DonNet%202.0)(project).rar