Sortowane typów kolekcji
Klasa System.Collections.SortedList , System.Collections.Generic.SortedList<TKey,TValue> klasa ogólna i System.Collections.Generic.SortedDictionary<TKey,TValue> klasa ogólna są podobne do Hashtable klasy i Dictionary<TKey,TValue> klasy ogólnej, w której implementują IDictionary interfejs, ale utrzymują swoje elementy w kolejności sortowania według klucza i nie mają właściwości wstawiania i pobierania tabel skrótów. Trzy klasy mają kilka wspólnych cech:
Wszystkie trzy klasy implementują System.Collections.IDictionary interfejs. Dwie klasy ogólne implementują System.Collections.Generic.IDictionary<TKey,TValue> również interfejs ogólny.
Każdy element jest parą klucz/wartość na potrzeby wyliczenia.
Uwaga
Klasa niegeneryczna SortedList zwraca DictionaryEntry obiekty podczas wyliczania, chociaż dwa typy ogólne zwracają KeyValuePair<TKey,TValue> obiekty.
Elementy są sortowane zgodnie z implementacją System.Collections.IComparer (dla niegenerycznych SortedList) lub implementacją System.Collections.Generic.IComparer<T> (dla dwóch klas ogólnych).
Każda klasa udostępnia właściwości, które zwracają kolekcje zawierające tylko klucze lub tylko wartości.
W poniższej tabeli wymieniono niektóre różnice między dwiema posortowaną klasą listy i klasą SortedDictionary<TKey,TValue> .
SortedList klasa niegeneryczna i SortedList<TKey,TValue> klasa ogólna | SortedDictionary<TKey,TValue> generic, klasa |
---|---|
Właściwości zwracające klucze i wartości są indeksowane, co umożliwia wydajne pobieranie indeksowanych. | Brak indeksowanego pobierania. |
Pobieranie to O(log n ). |
Pobieranie to O(log n ). |
Wstawianie i usuwanie są zazwyczaj O(n ); jednak wstawienie to O(log n ) dla danych, które są już w kolejności sortowania, tak aby każdy element został dodany na końcu listy. (Przyjęto założenie, że zmiana rozmiaru nie jest wymagana). |
Wstawianie i usuwanie to O(log n ). |
Używa mniejszej SortedDictionary<TKey,TValue>ilości pamięci niż . | Używa więcej pamięci niż SortedList klasa niegeneryczna i SortedList<TKey,TValue> klasa ogólna. |
W przypadku posortowanych list lub słowników, które muszą być dostępne jednocześnie z wielu wątków, można dodać logikę sortowania do klasy pochodzącej z klasy ConcurrentDictionary<TKey,TValue>. Biorąc pod uwagę niezmienność, następujące odpowiadające immujnie typy są zgodne z podobną semantyczną sortowania: ImmutableSortedSet<T> i ImmutableSortedDictionary<TKey,TValue>.
Uwaga
W przypadku wartości zawierających własne klucze (na przykład rekordy pracowników zawierające numer identyfikatora pracownika) można utworzyć kolekcję kluczy, która ma pewne cechy listy i niektóre cechy słownika, wyprowadzając je z KeyedCollection<TKey,TItem> klasy ogólnej.
Począwszy od programu .NET Framework 4, klasa udostępnia drzewo samodzielnego równoważenia, SortedSet<T> które przechowuje dane w kolejności posortowanej po wstawieniu, usunięciu i wyszukiwaniu. Ta klasa i HashSet<T> klasa implementują ISet<T> interfejs.