排序集合型別
System.Collections.SortedList 類別、System.Collections.Generic.SortedList<TKey, TValue> 泛型類別以及 System.Collections.Generic.SortedDictionary<TKey, TValue> 泛型類別在會實作 IDictionary 介面這方面全都類似於 Hashtable 類別與 Dictionary<TKey, TValue> 泛型類別,但它們是依索引鍵以排序次序來維護它們的元素,並且不具有雜湊資料表的 O(1) 插入和擷取特性。 這三個類別具有幾個共通的功能:
所有這三個類別都會實作 System.Collections.IDictionary 介面。 此外,其中兩個泛型類別還會實作 System.Collections.Generic.IDictionary<TKey, TValue> 泛型介面
每個元素都是一組用於列舉用途的索引鍵/值組
注意事項 被列舉時,非泛型 SortedList 類別會傳回 DictionaryEntry 物件,而這兩個泛型型別則會傳回 KeyValuePair<TKey, TValue> 物件。
元素會依據 System.Collections.IComparer 實作 (如果是非泛型 SortedList) 或 System.Collections.Generic.IComparer<T> 實作 (如果是這兩個泛型類別) 排序。
每個類別都會提供屬性,這些屬性會傳回只包含索引鍵或只包含值的集合
下表列出兩個排序的清單類別以及 SortedDictionary<TKey, TValue> 類別之間的一些差異。
SortedList 非泛型類別和 SortedList<TKey, TValue> 泛型類別 |
|
---|---|
會製作那些傳回索引鍵和值的屬性的索引,以便進行有效率的索引式擷取 |
非索引式擷取 |
擷取是 O(log n) |
擷取是 O(log n) |
引入運算子和移除一般是 O(n);不過,如果是已經處於排序次序的資料,引入運算子是 O(1),這樣每個元素都會加入至清單結尾 (這是假設不需要調整大小) |
引入運算子和移除是 O(log n) |
使用的記憶體比 SortedDictionary<TKey, TValue> 還少 |
使用的記憶體比 SortedList 非泛型類別和 SortedList<TKey, TValue> 泛型類別多 |
如需必須同時供多個執行緒存取的已排序清單或字典,您可以在衍生自 ConcurrentDictionary<TKey, TValue> 的類別中加入排序邏輯。
注意事項 |
---|
如果是本身包含索引鍵的值 (例如,包含員工 ID 編號的員工資料錄),您可以經由衍生自 KeyedCollection<TKey, TItem> 泛型類別來建立索引集合,此索引集合具有清單的某些特性以及目錄的某些特性。 |
從 .NET Framework 4 版 開始,SortedSet<T> 類別提供於插入、刪除與搜尋後維持資料排序順序的自我平衡樹狀結構。 這個類別和 HashSet<T> 類別會實作 ISet<T> 介面。
請參閱
參考
System.Collections.IDictionary
System.Collections.Generic.IDictionary<TKey, TValue>
ConcurrentDictionary<TKey, TValue>