Dans .NET, il existe un constructeur pour Dictionary<TKey, TValue>
qui prend un paramètre, int capacity
. Ceci est le même que pour de nombreuses autres collections telles que List<T>
, Queue<T>
et Stack<T>
; en outre, selon the MSDN documentation:Pourquoi n'y a-t-il pas de Dictionary.TrimExcess()?
La capacité d'un dictionnaire est le nombre d'éléments qui peuvent être ajoutés au dictionnaire avant que le redimensionnement soit nécessaire. Au fur et à mesure que des éléments sont ajoutés à un dictionnaire, la capacité est automatiquement augmentée si nécessaire en réallouant le tableau interne.
Cela me semble à peu près la même chose que d'autres collections comme List<T>
, etc. Étant donné que ces collections comportent le redimensionnement automatique des comportements en cas de besoin et sont donc susceptibles d'avoir une plus grande capacité que nécessaire, la plupart d'entre eux disposent d'un TrimExcess
méthode. C'est pratique si, par exemple, vous ajoutez un nombre inconnu d'éléments à la collection en même temps, et après cela vous n'ajouterez aucun élément supplémentaire.
Pourquoi Dictionary<TKey, TValue>
n'a pas la même méthode TrimExcess
?
(Disclaimer: Je connais très bien la réponse « caractéristiques n'existent pas par défaut », je suppose que je suis surtout me demandais s'il y a une raison particulière pour laquelle TrimExcess
pour une Dictionary
n'a pas de sens, ou pourquoi il serait plus difficile à mettre en œuvre que pour des collections plus simples comme List
.)
Depuis ' HashSet' a une méthode 'TrimExcess' et fonctionne aussi avec un HashTable en interne, je pense qu'il n'y a pas de raison technique pour ne pas implémenter' TrimExcess' pour 'Dictionary'. Ils disent même dans la documentation qu'un 'HashSet' est comme un' Dictionary' sans valeurs. – Kjara