Sortierte Auflistungstypen
Die System.Collections.SortedList-Klasse, die generische System.Collections.Generic.SortedList<TKey, TValue>-Klasse und die generische System.Collections.Generic.SortedDictionary<TKey, TValue>-Klasse sind insofern mit der Hashtable-Klasse und der generischen Dictionary<TKey, TValue>-Klasse vergleichbar, als sie die IDictionary-Schnittstelle implementieren. Sie behalten jedoch ihre Elemente in der Sortierreihenfolge nach Schlüssel bei und verfügen nicht über die O(1)-Einfüge- und -Abrufmerkmale von Hashtabellen. Die drei Klassen verfügen über mehrere gemeinsame Features:
Alle drei Klassen implementieren die System.Collections.IDictionary-Schnittstelle. Die beiden generischen Klassen implementieren zusätzlich die generische System.Collections.Generic.IDictionary<TKey, TValue>-Schnittstelle.
Jedes Element ist ein Schlüssel/Wert-Paar zu Enumerationszwecken.
Hinweis Die nicht generische SortedList-Klasse gibt bei der Enumeration DictionaryEntry-Objekte zurück, während die beiden generischen Typen KeyValuePair<TKey, TValue>-Objekte zurückgeben.
Elemente werden entsprechend einer System.Collections.IComparer-Implementierung (für die nicht generische SortedList-Klasse) oder einer System.Collections.Generic.IComparer<T>-Implementierung (für die beiden generischen Klassen) sortiert.
Jede Klasse stellt Eigenschaften bereit, die Auflistungen zurückgeben, die nur die Schlüssel oder nur die Werte enthalten.
In der folgenden Tabelle sind einige Unterschiede zwischen den beiden SortedList-Klassen und der SortedDictionary<TKey, TValue>-Klasse aufgelistet.
Nicht generische SortedList-Klasse und generische SortedList<TKey, TValue>-Klasse |
Generische SortedDictionary<TKey, TValue>-Klasse |
---|---|
Da die Eigenschaften zum Zurückgeben von Schlüsseln und Werten indiziert sind, ist ein effizienter indizierter Abruf möglich. |
Kein indizierter Abruf. |
O(log n)-Abruf. |
O(log n)-Abruf. |
Einfüge- und Abrufvorgänge erfolgen generell nach O(n); bei Daten, die sich bereits in der richtigen Sortierreihenfolge befinden, wird jedoch nach O(1) eingefügt, sodass jedes Element am Ende der Liste hinzugefügt wird. (Dabei wird davon ausgegangen, dass keine Größenanpassung erforderlich ist.) |
O(log n)-Einfüge- und -Abrufvorgänge. |
Benötigt weniger Arbeitsspeicher als SortedDictionary<TKey, TValue>. |
Benötigt mehr Arbeitsspeicher als die nicht generische SortedList-Klasse und die generische SortedList<TKey, TValue>-Klasse. |
In sortierten Listen oder Wörterbüchern, auf die von mehreren Threads gleichzeitig zugegriffen werden muss, können Sie einer Klasse, die von ConcurrentDictionary<TKey, TValue> abgeleitet wird, eine Sortierlogik hinzufügen.
Hinweis |
---|
Bei Werten, die eigene Schlüssel enthalten (z. B. Mitarbeiterdatensätze mit einer Mitarbeiter-ID), können Sie durch Ableitung von der generischen KeyedCollection<TKey, TItem>-Klasse eine verschlüsselte Auflistung erstellen, die einige Merkmale einer Liste und einige Merkmale eines Wörterbuchs aufweist. |
Ab .NET Framework, Version 4 stellt die SortedSet<T>-Klasse eine selbstausgleichende Struktur bereit, die die Sortierung von Daten nach Einfüge-, Lösch- und Suchvorgängen beibehält. Diese Klasse und die HashSet<T>-Klasse implementieren die ISet<T>-Schnittstelle.
Siehe auch
Referenz
System.Collections.IDictionary
System.Collections.Generic.IDictionary<TKey, TValue>
ConcurrentDictionary<TKey, TValue>