Pire des cas, le temps de la complexité mettre/obtenir HashMap
Ce qui est le cas le pire moment de la complexité d'une Hashmap lorsque le hashcode de ses touches sont toujours égaux.
Dans ma compréhension: chaque touche a le même hashcode il sera toujours aller à la même seau et boucle à travers de vérifier méthode equals donc, à la fois d'obtenir et de mettre la complexité du temps devrait être O(n), Suis-je le droit?
Je regardais ce HashMap obtenir/mettre la complexité mais cela ne répond pas à ma question.
Également ici Wiki De La Table De Hachage ils état le pire des cas, le temps de la complexité de l'insertion est O(1) et pour obtenir O(n) pourquoi est-il si?
Vous devez vous connecter pour publier un commentaire.
Oui, dans le pire des cas votre hash map va dégénérer en une liste, et vous allez souffrir un O(N) pénalité pour les recherches, ainsi que des insertions et des suppressions, qui exigent tous deux une opération de recherche (merci pour les commentaires pour souligner l'erreur dans ma précédente réponse).
Il existe des moyens d'atténuer le pire des cas, le comportement, par exemple en utilisant un auto-équilibrage de l'arbre au lieu d'une liste chaînée pour le seau de débordement - ce qui réduit le pire des cas, le comportement de O(logn) au lieu de O(n).
logn
, voir ma réponse à stackoverflow.com/questions/4553624/hashmap-get-put-complexity/...Dans Java 8 HashMap mise en œuvre:
De ici.
en ouvrir de hachage, vous aurez une liste liée de stocker des objets qui ont le même hashcode. donc:
par exemple, vous avez une table de hachage avec la taille 4.
1) supposons que vous souhaitez stocker un objet avec hashcode = 0. l'objet a alors sera mappée dans l'index (0 mod 4 = ) 0.
2) puis de nouveau à vous souhaitez mettre un autre objet avec hashcode = 8. cet objet sera mappée dans l'index (8 mod 4 = ) 0, on rappelle que l'indice 0 est déjà rempli avec notre premier objet, nous devons donc mettre le deuxième côté de la première.
3) quelles sont les étapes pour la recherche? 1er, vous devez hachage de la clé de l'objet et de supposer qu'il hashcode est de 8, de sorte que vous serez redirigé vers l'index (8 mod 4 = ) 0, ensuite parce qu'il n'y a plus d'un objet stocké dans le même index, nous devons rechercher un par un tous les objets stockés dans la liste jusqu'à ce que vous trouver la correspondance de l'une ou jusqu'à la fin de la liste. comme l'exemple a 2 objets stockés dans la même table de hachage de l'indice 0, et la recherche de l'objet se trouve à droite à la fin de la linkedlist, si vous avez besoin de marcher à travers tous les objets stockés. c'est pourquoi il est O(n) comme le pire des cas.
pire des cas se sont produits lors de tous les objet sont stockées dans le même index dans la table de hachage. ainsi, ils seront stockés dans une linkedlist dans lequel nous (mai) besoin de marcher à travers chacun d'eux pour trouver notre objet recherché.
espérons que cette aide,.
Lors de l'insertion, il n'a pas d'importance où dans le seau de le mettre, de sorte que vous pouvez simplement insérer n'importe où, donc de l'insertion est O(1).
De recherche est O(n) parce que vous aurez à effectuer une boucle sur chaque objet et de vérifier qu'il est bien celui que vous recherchez (comme vous l'avez dit).