La Performance de TreeMap, HashMap et LinkedHashMap?
Dans TreeMap - Éléments sont triés
Dans la HashMap - Éléments ne sont pas triés
Donc, si je considère get
, put
et remove
méthodes de quelle carte dois-je utiliser pour la performance?
Voir la Javadoc.
Sans le savoir à vos critères pour l'évaluation de l'option qui serait la meilleure, la réponse à cette question est impossible. Clairement, si vous avez besoin d'une collection triée seulement
Assez détaillée ici: difference-between-hashmap-linkedhashmap-and-treemap
La accepté de répondre à dit
HashMap
est de O(1): constante de temps de la performance pour les opérations de base (get et put), en supposant que la fonction de hachage disperse les éléments correctement entre les compartiments. TreeMap
est spécifié à la garantie de log(n) coût du temps pour la containsKey
, get
, put
et remove
opérations.Sans le savoir à vos critères pour l'évaluation de l'option qui serait la meilleure, la réponse à cette question est impossible. Clairement, si vous avez besoin d'une collection triée seulement
TreeMap
fera. Mais vous le saviez déjà.Assez détaillée ici: difference-between-hashmap-linkedhashmap-and-treemap
La accepté de répondre à dit
HashMap
est plus rapide. Mais la Javadoc LinkedHashMap
(Java 8) dit qu'il itère beaucoup plus rapide que HashMap
. Donc, YMMV, en fonction de vos propres critères. Certainement ne pas utiliser TreeMap
sauf si vous avez besoin tri, et l'utilisation LinkedHashMap
pour préserver l'ordre d'insertion.OriginalL'auteur Vicky | 2012-05-04
Vous devez vous connecter pour publier un commentaire.
Utiliser un
HashMap
sauf si vous avez un besoin pour la commande.HashMap
est plus rapide.Cela dit, vous pouvez le rendre facile de passer par l'aide de l'interface générique que votre déclaration:
Puis tout ce que vous avez à faire est de passer un endroit et de votre code utilise le nouveau type de carte.
Edit:
Un simple test de chronométrage:
La réponse est plus longue que la tienne dans ce commentaire. Prendre une des structures de données de la classe, ou de lire sur les tables de hachage et des arbres rouge-noir sur Wikipédia. Les tables de hachage sont
O(1)
amorti de travail par opération, en supposant une bonne fonction de hachage. Arbres rouge-noir sontO(lg n)
de travail par opération.ok merci beaucoup keith 🙂
J'ai essayé d'avoir des exemples pour treemap et hashmap...je suis entré 100000 entrée dans la carte et d'y accéder.. j'ai compté le temps. mais le résultat pour mes programmes est treemap-187 hashmap 206 signifie hashmap nécessite plus de temps...mais j'Ai confondu, merci de m'expliquer quelle est votre opinion à ce sujet?
Je n'ai pas le même résultat. Mettre 100000 entrées dans une carte prend environ 60 msec pour un
HashMap
et 90 ms pour unTreeMap
. Je vais poster mon code.OriginalL'auteur Keith Randall
Il dépend de la rapidité de la table de hachage et des fonctions de comparaison sont les clés de votre carte. Cela dépend si vous êtes plus intéressé dans la moyenne des cas, la performance ou pour le pire des cas la performance. Cela dépend si vous avez une bonne fonction de hachage appliquée à votre carte de clés; les valeurs de hachage doit être bien distribués dans l'ensemble de la fonction de hachage de domaine (oui, cela peut dépendre de vos données).
En général (quand vous ne pouvez pas être pris la peine de tester), une table de hachage de la carte est souvent une bonne réponse, mais il est également peu probable de faire une grande différence si vous n'avez pas des milliers d'entrées (pour les petites tailles, un "vec la carte" peut aussi bien travailler).
OriginalL'auteur dhardy