Java HashSet vs les Performances de la baie

J'ai une collection d'objets qui sont garantis pour être distincte (en particulier, indexée par un entier unique ID). Je sais exactement combien il y en a (et le nombre ne change pas), et je me demandais si le Tableau aurait un notable avantage de performance sur HashSet pour le stockage/récupération de ces éléments.

Sur le papier, le Tableau des garanties de la constante de temps d'insertion (car je sais que la taille à l'avance) et la récupération, mais le code pour HashSet a l'air beaucoup plus propre et ajoute un peu de souplesse, alors je me demandais si je ne suis rien perdre de performance de l'utiliser, au moins, en théorie.

Est votre jeu de données éparses ou dense?
HashSet est conçu pour avoir attendu de la constante de temps add, contains et remove opérations, ce qui signifie que le temps ne changera pas beaucoup, indépendamment de la façon dont de nombreux éléments sont dans le jeu. Les tableaux ont linéaire des opérations pour l'ensemble de ces, mais la baisse des frais généraux. Cela signifie que les tableaux seront généralement mieux pour les petits ensembles. J'ai fait quelques tests sur ma machine il n'ya pas longtemps avec un ArraySet mise en œuvre, et a trouvé qu'il était généralement mieux jusqu'à environ 150 éléments pour utiliser le Tableau, plutôt que de Hachage (mais ça dépend un peu sur la mise en œuvre et sur les opérations: l'Itération a été beaucoup plus rapide par exemple).
Il y a des millions d'avis sur ce point., javacodegeeks.com/2010/08/... et ibm.com/developerworks/library/j-jtp02183
En fonction du nombre d'articles que vous avez EnumSet ou quelque chose comme ça pourrait être une option.
Jetez un oeil à stackoverflow.com/questions/10196343/...

OriginalL'auteur donnyton | 2013-09-09