Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die System.Collections.SortedList Klasse, die System.Collections.Generic.SortedList<TKey,TValue> generische Klasse und die System.Collections.Generic.SortedDictionary<TKey,TValue> generische Klasse ähneln der Hashtable Klasse und der Dictionary<TKey,TValue> generischen Klasse dadurch, dass sie die IDictionary Schnittstelle implementieren, wobei sie ihre Elemente nach Schlüssel sortiert halten und nicht über die O(1)-Einfüge- und Abrufeigenschaft von Hashtabellen verfügen. Die drei Klassen verfügen über mehrere gemeinsame Features:
Alle drei Klassen implementieren die System.Collections.IDictionary Schnittstelle. Die beiden generischen Klassen implementieren auch die System.Collections.Generic.IDictionary<TKey,TValue> generische Schnittstelle.
Jedes Element ist ein Schlüssel-Wert-Paar für Enumerationszwecke.
Hinweis
Die nichtgenerische SortedList Klasse gibt DictionaryEntry Objekte zurück, wenn sie aufgezählt werden, obwohl die beiden generischen Typen Objekte zurückgeben KeyValuePair<TKey,TValue> .
Elemente werden nach einer System.Collections.IComparer Implementierung (für nichtgenerisch SortedList) 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 der Unterschiede zwischen den beiden sortierten Listenklassen und der SortedDictionary<TKey,TValue> Klasse aufgeführt.
SortedList nichtgenerische Klasse und SortedList<TKey,TValue> generische Klasse | SortedDictionary<TKey,TValue> generische Klasse |
---|---|
Die Eigenschaften, die Schlüssel und Werte zurückgeben, werden indiziert und ermöglichen einen effizienten indizierten Abruf. | Kein indizierter Abruf. |
Der Abruf erfolgt über O(log n ). |
Der Abruf erfolgt über O(log n ). |
Das Einfügen und Entfernen sind im Allgemeinen O(n ); das Einfügen ist jedoch O(log n ) für Daten, die bereits sortiert sind, damit jedes Element am Ende der Liste hinzugefügt wird. (Dabei wird davon ausgegangen, dass eine Größenänderung nicht erforderlich ist.) |
Einfügen und Entfernen erfolgen über „O(log n )“. |
Verwendet weniger Arbeitsspeicher als ein SortedDictionary<TKey,TValue>. | Verwendet mehr Arbeitsspeicher als die SortedList nichtgenerische Klasse und die SortedList<TKey,TValue> generische Klasse. |
Bei sortierten Listen oder Wörterbüchern, auf die gleichzeitig über mehrere Threads zugegriffen werden muss, können Sie einer Klasse, von ConcurrentDictionary<TKey,TValue>der abgeleitet wird, Sortierlogik hinzufügen. Bei Berücksichtigung der Unveränderlichkeit folgen die folgenden entsprechenden unveränderlichen Typen ähnlichen Sortiersemantik: ImmutableSortedSet<T> und ImmutableSortedDictionary<TKey,TValue>.
Hinweis
Für Werte, die ihre eigenen Schlüssel enthalten (z. B. Mitarbeiterdatensätze, die eine Mitarbeiter-ID-Nummer enthalten), können Sie eine Schlüsselauflistung erstellen, die einige Merkmale einer Liste und einige Merkmale eines Wörterbuchs enthält, indem Sie von der KeyedCollection<TKey,TItem> generischen Klasse abgeleitet werden.
Ab .NET Framework 4 stellt die SortedSet<T> Klasse eine Selbstausgleichsstruktur bereit, die Daten nach Einfügungen, Löschungen und Suchvorgängen in sortierter Reihenfolge verwaltet. Diese Klasse und die HashSet<T> Klasse implementieren die ISet<T> Schnittstelle.