Le temps de la Complexité de la HashMap méthodes
Depuis que je suis en train de travailler autour de l'heure de la complexité, j'ai été à la recherche par le biais de l'oracle Java bibliothèque de classe pour le moment, la complexité de certaines méthodes standard utilisées sur des Listes, des Cartes et des Classes. (plus précisément, ArrayList, HashSet et HashMap)
Maintenant, quand on regarde le HashMap javadoc page, ils ne font que parler de la get()
et put()
méthodes.
Les méthodes que j'ai encore besoin de savoir sont:
remove(Object o)
size()
values()
Je pense que remove()
sera la même complexité que get()
, O(1)
, en supposant que nous n'avons pas un géant de la table de hachage avec une égale hashCodes, etc etc...
Pour size()
je voudrais aussi assumer O(1)
, depuis un HashSet, qui n'a pas de commande, a un size()
méthode de la complexité O(1)
.
Celui que je n'ai aucune idée de qui est values()
- je ne suis pas sûr de savoir si cette méthode sera juste en quelque sorte une "copie" de la table de hachage, donnant une fois de la complexité de O(1)
, ou si elle devra effectuer une itération sur la table de hachage, faisant de la complexité égale à la somme des éléments stockés dans la table de hachage.
Grâce.
- Btw, comment pourrait -
values()
donnerO(1)
si elle même si elle vient en quelque sorte de "copier" la table de hachage ? - par ailleurs, votre lien est rompu
- Pourriez-vous s'il vous plaît mentionner le exactes de la complexité (moyenne ou pire) que vous cherchez dans votre question ? La complexité de supprimer() sera différente en conséquence, comme l'a justement signalé par @JavaGuy
Vous devez vous connecter pour publier un commentaire.
La source est souvent utile: http://kickjava.com/src/java/util/HashMap.java.htm
remove:
O(1)size:
O(1)values:
O(n) (sur traversée par itérateur)Le code pour supprimer(comme dans rt.jar pour HashMap) est:
Clairement, le pire des cas est O(n).
Vous pouvez toujours jeter un oeil sur le code source et de le vérifier par vous-même.
De toute façon... une fois, j'ai vérifié le code source et ce dont je me souviens c'est qu'il y est une variable nommée
size
qui tiennent toujours le nombre d'éléments dans laHashMap
doncsize()
estO(1)
.De recherche: O(1+k/n)
Insert: O(1)
Supprimer: O(1+k/n)
où k est le pas. de collision éléments ajoutés à la même LinkedList (k éléments avaient même hashCode)
De l'Insertion est O(1) car vous ajoutez l'élément à droite à la tête de la LinkedList.
Amorti Temps complexités sont à proximité de O(1) donne un bon hashFunction. Si vous êtes trop préoccupé par recherche de temps, puis essayer de résoudre les collisions à l'aide d'un BinarySearchTree au lieu de l'implémentation par Défaut de java j'.e LinkedList