En C#.NET, j'aime utiliser les HashSets en raison de leur complexité temporelle O(1) supposée pour les recherches. Si j'ai un grand ensemble de données qui va être interrogé, je préfère souvent utiliser un HashSet plutôt qu'une liste, car il a cette complexité temporelle.
Ce qui me perturbe, c'est le constructeur du HashSet, qui prend IEqualityComparer comme argument :
http://msdn.microsoft.com/en-us/library/bb359100.aspx
Dans le lien ci-dessus, les remarques indiquent que le "constructeur est une opération O(1)", mais si c'est le cas, je suis curieux de savoir si la recherche est toujours O(1).
En particulier, il me semble que si j'écrivais un Comparer à passer dans le constructeur d'un HashSet, à chaque fois que j'effectue une recherche, le code du Comparer devrait être exécuté sur chaque clé pour vérifier s'il y a une correspondance. Ce ne serait pas O(1), mais O(n).
L'implémentation construit-elle en interne une table de recherche au fur et à mesure que des éléments sont ajoutés à la collection ?
D'une manière générale, comment puis-je obtenir des informations sur la complexité des structures de données .NET ?