Tipos de colecciones ordenadas
La clase System.Collections.SortedList, la clase genérica System.Collections.Generic.SortedList<TKey,TValue> y la clase genérica System.Collections.Generic.SortedDictionary<TKey,TValue> son similares a la clase Hashtable y a la clase genérica Dictionary<TKey,TValue> en que implementan la interfaz IDictionary, pero mantienen sus elementos en el criterio de ordenación mediante la clave, y no tienen la inserción O(1) y la característica de recuperación de las tablas hash. Las tres clases tienen varias características en común:
Las tres clases implementan la interfaz System.Collections.IDictionary. Las dos clases genéricas también implementan la interfaz genérica System.Collections.Generic.IDictionary<TKey,TValue>.
Cada elemento es un par de clave y valor para propósitos de enumeración.
Nota
La clase SortedList no genérica devuelve objetos DictionaryEntry cuando se enumera, aunque los dos tipos genéricos devuelven objetos KeyValuePair<TKey,TValue>.
Los elementos se ordenan según una implementación System.Collections.IComparer (para SortedList no genérico) o una implementación System.Collections.Generic.IComparer<T> (para las dos clases genéricas).
Cada clase proporciona propiedades que devuelven colecciones que contienen solo las claves o solo los valores.
En la tabla siguiente se enumeran algunas de las diferencias entre las dos clases de lista ordenada y la clase SortedDictionary<TKey,TValue>.
Clase no genérica SortedList y clase genérica SortedList<TKey,TValue> | Clase genérica SortedDictionary<TKey,TValue> |
---|---|
Las propiedades que devuelven claves y valores se indizan, lo que permite una recuperación indizada eficaz. | Sin recuperación indizada. |
La recuperación es O(log n ). |
La recuperación es O(log n ). |
La inserción y eliminación son generalmente O(n ); pero la inserción es O(log n ) para los datos que ya están en el criterio de ordenación, de manera que cada elemento se agrega al final de la lista. (Se supone que no es necesario cambiar de tamaño). |
La inserción y eliminación son O(log n ). |
Usa menos memoria que SortedDictionary<TKey,TValue>. | Usa más memoria que la clase no genérica SortedList y la clase genérica SortedList<TKey,TValue>. |
Para listas ordenadas o diccionarios que deben ser accesibles simultáneamente desde varios subprocesos, se puede agregar una lógica de ordenación a una clase que deriva de ConcurrentDictionary<TKey,TValue>. Al considerar la inmutabilidad, los siguientes tipos inmutables correspondientes siguen una semántica de ordenación similar: ImmutableSortedSet<T> y ImmutableSortedDictionary<TKey,TValue>.
Nota
Para los valores que contienen sus propias claves (por ejemplo, registros de empleados que contienen un número de id. de empleado), puede derivar de la clase genérica KeyedCollection<TKey,TItem> para crear una colección con clave que tenga algunas características de lista y algunas características de diccionario.
A partir de .NET Framework 4, la clase SortedSet<T> proporciona un árbol de equilibrio automático que mantiene los datos ordenados después de las operaciones de inserción, eliminación y búsqueda. Esta clase y la clase HashSet<T> implementan la interfaz ISet<T>.