Est HashMap en Java collision sûr
Je suis en train d'élaborer un analyseur qui doit mettre les paires clé-valeur dans la table de hachage.
Mais une clé peut avoir plusieurs valeurs qui, je peux le faire de cette façon
HashMap<String,ArrayList<String>>
.
Mais qu'advient-il si le nombre de touches sont très grandes et il met en parallèle avec d'autres clés du hashcode.
Sera que de réécrire précédente valeur de clé ?
OriginalL'auteur changed | 2009-11-15
Vous devez vous connecter pour publier un commentaire.
Si le hachage de la clé dans la carte entre en collision avec une clé existante, la Carte se réorganiser ou de garder les clés dans une liste en vertu de hachage. Pas de touches d'être écrasés par d'autres clés que se passera donc être triés dans le même seau.
Si plusieurs threads à l'aide de la carte simultanément, vous pouvez synchroniser l'accès à la carte si il ne gère pas les accès concurrents. (Certaines Cartes standards faire, d'autres ne le font pas. Les Collections Java package contient les classes wrapper qui ajoutent de la synchronisation.)
OriginalL'auteur rsp
Tout d'abord, prendre un coup d'oeil à Google Collections Multimap qui permet d'attribuer plusieurs valeurs pour la clé sans avoir à gérer manuellement la liste de valeurs.
D'autre part, aucun - clés qui ont le même hashcode ne sera pas entrer en collision. Des codes de hachage ne sont pas garantis ou doit être unique; HashMap maintient un "seau" de paires clé/valeur pour chaque code de hachage interne.
De côté: il est intéressant de remarquer que le comportement décrit par @Alex ne s'applique PAS dans le cas de
IdentityHashmap
. Là, l'identité "hashcode" et==
sont utilisés pour la clé, indépendamment de la façon donthashcode
etequals
ont été remplacés.OriginalL'auteur ChssPly76
HashMap est de collision-coffre-fort: regarder le code source pour mettre:
et
Les entrées de la table de la loi comme une liste chaînée. Lorsque vous placez une nouvelle entrée dans le même seau, qu'il ajoute à la liste liée.
OriginalL'auteur Chip Uni
Il ne remplace la précédente valeur de clé si elle est égale à la clé précédente. Il existe des méthodes comme linéaire de sondage, ressasser, seaux, etc., qui sont utilisés dans les implémentations de hachage pour éviter hashcode de collisions de l'écrasement de l'inégalité de touches.
OriginalL'auteur Anthony Mills
Je contribuerait qu'une collision est pas le même que l'insertion d'une clé identique. Les Collisions se produisent lorsque les clés de hachage à la même valeur. Il est entendu que toute personne qui implémente l'interface de la Carte doit être équipé pour gérer les collisions. Ainsi, la réponse à votre question est oui, HashMap en Java sécu gérer les collisions.
Toutefois, si la même clé est insérée, puis la Valeur précédente associée à exactement la même clé sera mis à jour et remplacé. Ce n'est pas considéré comme une collision en soi, mais un lien direct casser de ce qui existe déjà.
OriginalL'auteur kodjeff1