排序集合類型
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> 泛型介面。
每個元素都是進行列舉的索引鍵/值組。
注意
列舉時,雖然兩個泛型類型傳回 KeyValuePair<TKey,TValue> 物件,但非泛型 SortedList 類別會傳回 DictionaryEntry 物件。
項目會依 System.Collections.IComparer 實作排序 (非泛型 SortedList) 或依 System.Collections.Generic.IComparer<T> 實作排序 (兩個泛型類別)。
每個類別都會提供傳回集合的屬性,而這個集合僅包含索引鍵或僅包含值。
下表列出兩個已排序清單類別與 SortedDictionary<TKey,TValue> 類別之間的部分差異。
SortedList泛型類別與 SortedList<TKey,TValue> 泛型類別 | SortedDictionary<TKey,TValue>泛型類別 |
---|---|
對傳回索引鍵和值的屬性進行編製索引,以進行有效率的索引擷取。 | 無索引擷取。 |
擷取是 O(log n )。 |
擷取是 O(log n )。 |
插入和移除一般是 O(n );不過,對於已處於排序次序的資料,插入是 O(log n ),因此每個項目都會新增至清單的結尾。 (這假設不需要調整大小)。 |
插入和移除是 O(log n )。 |
使用的記憶體少於 SortedDictionary<TKey,TValue>。 | 使用的記憶體多於 SortedList 非泛型類別和 SortedList<TKey,TValue> 泛型類別。 |
針對必須可以從多個執行緒同時存取的已排序清單或字典,您可以將排序邏輯新增至衍生自 ConcurrentDictionary<TKey,TValue> 的類別。 考慮不變性時,下列對應的不可變類型會遵循類似的排序語意:ImmutableSortedSet<T> 和 ImmutableSortedDictionary<TKey,TValue>。
注意
針對包含專屬索引鍵的值 (例如,包含員工識別碼的員工記錄),您可以建立索引鍵集合,而索引鍵集合透過衍生自 KeyedCollection<TKey,TItem> 泛型類別而具有部分清單特性和部分字典特性。
從 .NET Framework 4 開始,SortedSet<T> 類別會提供自我平衡樹狀目錄,以便在插入、刪除和搜尋之後依排列順序維護資料。 這個類別和 HashSet<T> 類別會實作 ISet<T> 介面。