Sortierte Sammlungstypen
Die System.Collections.SortedList-Klasse, die generische System.Collections.Generic.SortedList<TKey,TValue>-Klasse sowie die generische System.Collections.Generic.SortedDictionary<TKey,TValue>-Klasse sind der Hashtable-Klasse und der generischen Dictionary<TKey,TValue>-Klasse in der Weise ähnlich, dass sie die IDictionary-Schnittstelle implementieren. Sie behalten jedoch ihre Elemente in der Reihenfolge nach Schlüssel bei, und sie verfügen nicht über die O(1)-Einfüge- und -Abrufeigenschaften von Hashtabellen. Die drei Klassen haben verschiedene Merkmale gemeinsam:
Alle drei Klassen implementieren die System.Collections.IDictionary-Schnittstelle. Die zwei generischen Klassen implementieren außerdem 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 einer Enumeration DictionaryEntry-Objekte zurück, obwohl zwei generische Typen KeyValuePair<TKey,TValue>-Objekte zurückgeben.
Elemente werden nach einer System.Collections.IComparer-Implementierung (für nicht-generische SortedList) oder einer System.Collections.Generic.IComparer<T>-Implementierung (für die zwei generischen Klassen) sortiert.
Jede Klasse enthält Eigenschaften, die Sammlungen zurückgeben, die nur die Schlüssel oder nur die Werte enthalten.
Die folgende Tabelle enthält einige Unterschiede zwischen den beiden SortedList-Klassen und der SortedDictionary<TKey,TValue>-Klasse.
Nicht generische SortedList-Klasse und generische SortedList<TKey,TValue>-Klasse | Generische SortedDictionary<TKey,TValue>-Klasse |
---|---|
Die Eigenschaften, die Schlüssel und Werte zurückgeben, werden indiziert, um einen effizienten Abruf zu ermöglichen. | Kein indizierter Abruf. |
Der Abruf erfolgt über O(log n ). |
Der Abruf erfolgt über O(log n ). |
Das Einfügen und Entfernen erfolgt im Allgemeinen über „O(n )“. Das Einfügen erfolgt jedoch über „O(log n )“ für Daten, die bereits in der Sortierreihenfolge vorliegen, sodass jedes Element am Ende der Liste hinzugefügt wird. (Dies setzt voraus, dass keine Größenänderung erforderlich ist.) |
Einfügen und Entfernen erfolgen über „O(log n )“. |
Benötigt weniger Speicher als SortedDictionary<TKey,TValue>. | Benötigt mehr Arbeitsspeicher als die nicht generische Klasse SortedList und die generische Klasse SortedList<TKey,TValue>. |
Für sortierte Listen oder Wörterbücher, die gleichzeitig für mehrere Threads zugänglich sein müssen, können Sie einer Klasse Sortierlogik hinzufügen, die von ConcurrentDictionary<TKey,TValue> abgeleitet wird. Bei Berücksichtigung der Unveränderlichkeit folgen die folgenden entsprechenden unveränderlichen Typen einer ähnlichen Sortiersemantik: ImmutableSortedSet<T> und ImmutableSortedDictionary<TKey,TValue>.
Hinweis
Für Werte, die ihre eigenen Schlüssel enthalten (z.B. Mitarbeiterdatensätze mit einer Mitarbeiter-ID), können Sie durch Ableiten von der generischen Klasse KeyedCollection<TKey,TItem> eine schlüsselgebundene Sammlung erstellen, die einige Merkmale einer Liste und einige Merkmale eines Wörterbuchs aufweist.
Ab .NET Framework 4 stellt die Klasse SortedSet<T> eine selbstausgleichende Struktur bereit, in der Daten nach Einfüge-, Lösch- und Suchvorgängen in Sortierreihenfolge verwaltet werden. Diese Klasse sowie die HashSet<T>-Klasse implementieren die ISet<T>-Schnittstelle.