Je trouve que SortedList<TKey, TValue>
SortedDictionary<TKey, TValue>
et Dictionary<TKey, TValue>
implémentent les mêmes interfaces.
SortedList
et SortedDictionary
sur Dictionary
?SortedList
et SortedDictionary
en termes d'application?Lors d'une itération sur les éléments de l'un ou l'autre, les éléments seront triés. Pas si avec Dictionary<T,V>
.
MSDN adresse la différence entre SortedList<T,V>
et SortedDictionary<T,V>
:
La classe générique SortedDictionary (TKey, TValue) est une recherche binaire arbre avec récupération O (log n), où n est le nombre d'éléments dans le dictionnaire. À cet égard, il est similaire à la classe générique SortedList (TKey, TValue). Les deux classes ont des modèles d'objet similaires, et les deux ont une récupération O (log n). La différence entre les deux classes est en utilisation de la mémoire et vitesse d'insertion et de retrait:
SortedList (TKey, TValue) utilise moins de mémoire que SortedDictionary (TKey, TValue).
SortedDictionary (TKey, TValue) a une insertion et une suppression plus rapides opérations pour les données non triées: O (log n) par opposition à O(n) pour SortedList (TKey, TValue).
Si la liste est remplie en une fois à partir de données triées, SortedList (TKey, TValue) est plus rapide que SortedDictionary (TKey, TValue).
Je mentionnerais la différence entre les dictionnaires.
L'image ci-dessus montre que Dictionary<K,V>
est égal ou plus rapide dans tous les cas que Sorted
analogique, mais si l'ordre des éléments est requis, par ex. pour les imprimer, Sorted
on choisit.
Pour résumer les résultats d'un Performance Test - SortedList vs SortedDictionary vs Dictionary vs Hashtable , les résultats du meilleur au pire pour différents scénarios:
Utilisation de la mémoire:
SortedList<T,T>
Hashtable
SortedDictionary<T,T>
Dictionary<T,T>
Insertions:
Dictionary<T,T>
Hashtable
SortedDictionary<T,T>
SortedList<T,T>
Opérations de recherche:
Hashtable
Dictionary<T,T>
SortedList<T,T>
SortedDictionary<T,T>
opérations de boucle foreach
SortedList<T,T>
Dictionary<T,T>
Hashtable
SortedDictionary<T,T>
Lorsque vous souhaitez que la collection soit triée par clé lorsque vous la parcourez. Si vous n'avez pas besoin que vos données soient triées, il vaut mieux utiliser un dictionnaire uniquement pour obtenir de meilleures performances.
SortedList et SortedDictionary font à peu près la même chose, mais sont implémentées différemment et ont donc des forces et des faiblesses différentes expliqué ici .
En essayant d’attribuer un score performance à chaque cas présenté par @Lev, j’ai utilisé les valeurs suivantes:
Les résultats sont (plus haut = meilleur):
Dictionary: 12.0
SortedDictionary: 9.0
SortedList: 6.5
Bien entendu, chaque cas d'utilisation donnera plus de poids à certaines opérations.