La clase genérica SortedList es un árbol de búsqueda binaria que recupera mediante O(logn), donde n es el número de elementos del diccionario. En este aspecto, es similar a la clase genérica SortedDictionary. Las dos clases tienen modelos de objetos similares y ambas recuperan mediante O(log n). En lo que se diferencian las dos clases es en el uso de memoria y en la velocidad de inserción y eliminación:
-
SortedList utiliza menos memoria que SortedDictionary.
-
Las operaciones de inserción y eliminación de SortedDictionary para los datos no ordenados son más rápidas: operaciones O(log n) frente a las operaciones O(n) de SortedList.
-
Si la lista se rellena de una sola vez de datos ordenados, la colección SortedList es más rápida que SortedDictionary.
Otra diferencia entre las clases SortedDictionary y SortedList es que SortedList admite la recuperación indizada eficaz de claves y valores mediante las colecciones que devuelven las propiedades Keys y Values. Cuando se obtiene acceso a las propiedades, no es necesario volver a generar las listas puesto que éstas únicamente son contenedores para las matrices internas de claves y valores. En el código siguiente se muestra el uso de la propiedad Values para la recuperación indizada de valores de una lista ordenada de cadenas:
Dim v As String = mySortedList.Values(3)
string v = mySortedList.Values[3];
String^ v = mySortedList->Values[3];
SortedList se implementa como una matriz de pares clave/valor, ordenada conforme a la clave. Cada elemento se puede recuperar como un objeto KeyValuePair.
Los objetos de claves deben permanecer inmutables mientras se utilicen como claves en SortedList. Todas las claves de una colección SortedList deben ser únicas. Una clave no puede ser referencia de objeto null (Nothing en Visual Basic), pero un valor sí puede serlo si el tipo de los valores de la lista, TValue, es un tipo de referencia.
SortedList requiere la implementación de un comparador para ordenar y realizar comparaciones. El comparador predeterminado Comparer.Default comprueba si el tipo de clave TKey implementa System.IComparable y utiliza esa implementación, si está disponible. En caso contrario, Comparer.Default comprueba si el tipo de clave TKey implementa System.IComparable. Si el tipo de clave TKey no implementa ninguna de las interfaces, se puede especificar una implementación de System.Collections.Generic.IComparer en una sobrecarga de constructor que acepte un parámetro comparer.
La capacidad de una colección SortedList es el número de elementos que dicha SortedList puede contener. En esta implementación, la capacidad inicial predeterminada para una colección SortedList es 16; sin embargo, ese valor predeterminado quizás cambie en las versiones futuras de .NET Framework. Cuando se agregan elementos a una colección SortedList, la capacidad aumenta automáticamente según sea necesario mediante la reasignación de la matriz interna. La capacidad se puede disminuir si se llama al método TrimExcess o si se establece explícitamente la propiedad Capacity. Al disminuir la capacidad se reasigna memoria y se copian todos los elementos de la colección SortedList.
La instrucción foreach del lenguaje C# (for each en C++, For Each en Visual Basic) requiere el tipo de los elementos de la colección. Como los elementos de SortedList son pares clave/valor, el tipo del elemento no se corresponde con el tipo de la clave, ni con el del valor. En su lugar, el tipo del elemento es KeyValuePair. Por ejemplo:
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
La instrucción foreach es un contenedor del enumerador, que sólo permite la lectura pero no la escritura en la colección.