Bei der generischen SortedList-Klasse handelt es sich um eine binäre Suchstruktur mit O(log n)-Abruf, wobei n für die Anzahl der Elemente im Wörterbuch steht. In dieser Hinsicht ähnelt sie der generischen SortedDictionary-Klasse. Die beiden Klassen verfügen sowohl über ähnliche Objektmodelle als auch über O(log n)-Abruf. Sie unterscheiden sich jedoch in der Speichernutzung und in der Geschwindigkeit von Einfüge- und Entfernungsvorgängen:
-
SortedList benötigt weniger Speicher als SortedDictionary.
-
Unsortierte Daten werden vom SortedDictionary schneller hinzugefügt und entfernt: O(log n) im Gegensatz zu O(n) bei der SortedList.
-
Wenn die Liste in einem Vorgang mit sortierten Daten gefüllt wird, ist die SortedList schneller als das SortedDictionary.
Ein weiterer Unterschied zwischen der SortedDictionary-Klasse und der SortedList-Klasse liegt darin, dass SortedList einen effizienten, indizierten Abruf von Schlüsseln und Werten über die Auflistungen unterstützt, die von der Keys-Eigenschaft und der Values-Eigenschaft zurückgegeben werden. Beim Zugriff auf die Eigenschaften ist es nicht erforderlich, die Listen neu zu generieren, da die Listen nur als Wrapper für die internen Arrays von Schlüsseln und Werten dienen. Im folgenden Code wird gezeigt, wie mithilfe der Values-Eigenschaft eine indizierte Abfrage von Werten aus einer sortierten Liste von Zeichenfolgen erfolgen kann:
Dim v As String = mySortedList.Values(3)
string v = mySortedList.Values[3];
String^ v = mySortedList->Values[3];
SortedList wird als ein Array von Schlüssel-Wert-Paaren implementiert, das anhand des Schlüssels sortiert wird. Jedes Element kann als KeyValuePair-Objekt abgerufen werden.
Schlüsselobjekte müssen unveränderlich sein, solange sie als Schlüssel in SortedList verwendet werden. Jeder Schlüssel in einer SortedList muss eindeutig sein. Ein Schlüssel kann nicht NULL (Nothing in Visual Basic) sein. Bei einem Wert ist dies hingegen zulässig, wenn der Typ der Werte in der Liste, TValue, ein Verweistyp ist.
Die SortedList benötigt für das Sortieren und Vergleichen eine Vergleichsimplementierung. Der Standardvergleich Comparer.Default überprüft, ob der Schlüsseltyp TKeySystem.IComparable implementiert, und verwendet diese Implementierung, sofern verfügbar. Andernfalls überprüft Comparer.Default, ob der Schlüsseltyp TKeySystem.IComparable implementiert. Wenn der Schlüsseltyp TKey keine der Schnittstellen implementiert, können Sie in einer Konstruktorüberladung eine System.Collections.Generic.IComparer-Implementierung angeben, die einen comparer-Parameter akzeptiert.
Bei der Kapazität einer SortedList handelt es sich um die Anzahl der Elemente, die die SortedList enthalten kann. In dieser Implementierung beträgt die Standardanfangskapazität eines SortedList 16. Dieser Standardwert kann sich in zukünftigen Versionen von .NET Framework jedoch ändern. Wenn einer SortedList Elemente hinzugefügt werden, wird die Kapazität durch die Neuzuordnung des internen Arrays automatisch nach Bedarf erhöht. Die Kapazität kann über einen Aufruf von TrimExcess oder durch ein explizites Festlegen der Capacity-Eigenschaft verringert werden. Beim Verringern der Kapazität werden der Arbeitsspeicher neu reserviert und alle Elemente in der SortedList kopiert.
Für die foreach-Anweisung in C# (for each in C++, For Each in Visual Basic) ist der Typ der Elemente in der Auflistung erforderlich. Da die Elemente von SortedList Schlüssel-Wert-Paare sind, ist der Elementtyp nicht der Typ des Schlüssels oder Werts. Stattdessen ist der Elementtyp KeyValuePair. Beispiel:
foreach (KeyValuePair<int, string> kvp in mySortedList) {...}
for each (KeyValuePair<int, String^> kvp in mySortedList) {...}
For Each kvp As KeyValuePair(Of Integer, String) In mySortedList
...
Next kvp
Die foreach-Anweisung ist ein Wrapper um den Enumerator, der nur das Lesen aus der Auflistung aber nicht das Schreiben in diese zulässt.