c# - SortedList<>, SortedDictionary<> y Dictionary<>
generics (4)
Al iterar sobre los elementos en cualquiera de los dos, los elementos serán ordenados. No es así con
Dictionary<T,V>
.MSDN aborda la diferencia entre
SortedList<T,V>
ySortedDictionary<T,V>
:
La clase genérica SortedDictionary (TKey, TValue) es un árbol de búsqueda binaria con recuperación O (log n), donde n es el número de elementos en el diccionario. A este respecto, es similar a la clase genérica SortedList (TKey, TValue). Las dos clases tienen modelos de objetos similares, y ambos tienen recuperación O (log n). Donde las dos clases difieren es en el uso de la memoria y la velocidad de inserción y eliminación:
SortedList (TKey, TValue) utiliza menos memoria que SortedDictionary (TKey, TValue).
SortedDictionary (TKey, TValue) tiene operaciones de inserción y eliminación más rápidas para datos sin clasificar: O (log n) en oposición a O (n) para SortedList (TKey, TValue).
Si la lista se completa de una sola vez a partir de datos ordenados, SortedList (TKey, TValue) es más rápido que SortedDictionary (TKey, TValue).
Encuentro que SortedList<TKey, TValue>
SortedDictionary<TKey, TValue>
y Dictionary<TKey, TValue>
implementan las mismas interfaces.
- ¿Cuándo deberíamos optar por
SortedList
ySortedDictionary
overDictionary
? - ¿Cuál es la diferencia entre
SortedList
ySortedDictionary
en términos de aplicación?
Cuando desee que la colección se ordene por clave cuando itere sobre ella. Si no necesita ordenar sus datos, estará mejor con solo un diccionario, tendrá un mejor rendimiento.
SortedList y SortedDictionary hacen prácticamente lo mismo, pero se implementan de manera diferente, por lo que se explican las fortalezas y debilidades diferentes aquí .
Para resumir los resultados de una prueba de rendimiento - SortedList vs. SortedDictionary vs. Dictionary vs. Hashtable , los resultados de mejor a peor para diferentes escenarios:
Uso de memoria:
SortedList<T,T>
Hashtable
SortedDictionary<T,T>
Dictionary<T,T>
Inserciones:
Dictionary<T,T>
Hashtable
SortedDictionary<T,T>
SortedList<T,T>
Operaciones de búsqueda:
Hashtable
Dictionary<T,T>
SortedList<T,T>
SortedDictionary<T,T>
operaciones de bucle foreach
SortedList<T,T>
Dictionary<T,T>
Hashtable
SortedDictionary<T,T>
Mencionaría la diferencia entre los diccionarios.
La imagen de arriba muestra que el Dictionary<K,V>
es igual o más rápido en todos los casos que el Sorted
ordenado, pero si se requiere el orden de los elementos, por ejemplo, para imprimirlos, se elige uno.