顯示具有 DotNetFramework-集合與泛型 標籤的文章。 顯示所有文章
顯示具有 DotNetFramework-集合與泛型 標籤的文章。 顯示所有文章

2012年1月16日 星期一

集合類別

比較表

CollectionDictionaryCollection<T>Dictionary<T,U>
基本型 ArrayList Hashtable List<T> Dictionary<T,U>
字串型別 StringCollection StringDictionary :1 key -> 1 value
NameValueCollection :1 key -> n value
List<T> Dictionary<T,U>
Bool型別 BitArray
連續型的 Stack :LIFO
Queue :FIFO
Stack<T>
Queue<T>
item 順序 SortedList :順序依 key 值自動排序
OrderedDictionary :順序維持加入的順序
SortedList<T,U>
SortedDictionaryt<T,U>
Dictionary<T,U>
存取效能 ListDictionary :適合項目小於 10 個的集合。
HybridDictionary :項目無法預期時,這個類別會自動調整。
Dictionary<T,U>

ArrayList 集合

集合物件的特性:允許資料項目的增減,可以巡覽集合中的資料項目。

Stack、Queue 集合

ArrayList 中,我們可以直接存取集合中任何一個資料項目,但有時候我們並不需要如此功能,只需要可以循序存取集合中的項目即可。 在 .Net 裡,提供了二個循序串列 (sequential list) 物件:QueueStack 。 這二個物件的特色是,可以在一個步驟中,由集合中取出資料項目,並同時將該資料項目由集合中移除。

Dictionaries

什麼是 Dictionaries

當資料型態具有 key/value 特性時,就可以使用 Dictionary 類型的集合。它可以用來建立索引表,將任意的 key 與 value 做關連對應。.NET Framework 包含下列 Dictionary 類別:

  • Hashtable :最基本的字典集合,每個項目都是儲存在 DictionaryEntry 物件中的 key/value 組。可透過 key 取得項目的 value。
  • SortedList :類似 Hashtable,會自動以 key 排序集合內的項目。
  • ListDictionary :當集合項目少於10個時,採用這個集合類別效率較佳。
  • HybridDictionary :使用這個集合,當集合項目少於10個時,會採用 ListDictionary ,若項目變大時,會自動轉成 Hashtable
  • OrderedDictionary :類似 Hashtable ,但集合中的項目會依加入的先後順序排列,不像 Hashtable 是依 hashcode 排列。

底下二個是比較特殊類似字典的集合

  • StringDictionary :類似 Hashtable ,但 key/value 都只允許字串型別, Key 不能重複,一個 key 只能對應一個 value 。
  • NameValueCollection :類似 Hashtable ,但 key/value 都只允許字串型別, Key 不能重複,一個 key 可以對應多個 value 。

下列幾點是有關於 Dictionary 的幾點特性:

  • 每個項目都是儲存在 DictionaryEntry 物件中的 Key/Value。
  • Key 必需唯一的。
  • Value 可以是 null ,而且不一定要是唯一的。
  • IDictionary 實作分為三類:唯讀、固定大小、變數大小。
    • 唯讀的 IDictionary 物件無法修改。
    • 固定大小的 IDictionary 物件不允許加入或移除項目,但允許修改現有項目。
    • 變數大小的 IDictionary 物件允許加入、移除和修改項目。

Specialized Collections

前面介紹的集合,其組成項目都是由 Object 構成,當要擷取資料項目時就會用到cast objects。

System.Collections.Specialized 命名空間底下,定義了一些僅允許特定型別的集合類別。 例如:

Generic Collections

How Generics Work

Generics簡述

Generics 是.Net2.0才加入的功能。是一種型別參數的概念,也就是當class或method在設計時,可以先擱置型別,直到用戶端程式要使用時再行處理型別。 目的在於避免run time時需要boxing/unboxing的情況。泛型可以用在.Net中的許多地方,但是最常見的就屬泛型集合類別。