8
votes

Question d'entretien sur Java Hashcode ()

J'ai récemment assisté à une interview et j'ai demandé la question suivante.

Il y a deux objets avec le même hashcode. Je vais insérer ces deux objets à l'intérieur d'un hashmap.

hmap.put (a, a); hmap.put (B, B);

a.hashcode () == b.ashcode ()

Dis-moi maintenant combien d'objets seront là à l'intérieur du hashmap?

J'ai répondu qu'il n'y aura qu'un seul objet, car les hachons hachés sont égaux, les deux objets seront égaux et que HASHMAP n'autorisera pas les touches en double. S'il vous plaît dites-moi si ma compréhension est correcte ou non?


2 commentaires

Vous ne pouvez pas répondre à la question sans savoir si a.equals (b) afin que ce soit votre réponse.


Dépend du type d'élément et de la manière dont HashCode est mis en œuvre. Imaginez une carte des chaînes. Il n'y a que 2 ^ 32 différents codes de hachage, mais un lot plus de valeurs de chaîne possibles. Il est donc impossible pour chaque valeur de chaîne d'avoir un code de hachage unique.


5 Réponses :


1
votes

Il y aura deux objets dans le hashmap, car ils ne sont pas égaux () code>.

Voici la preuve: p> xxx pré>

: p> xxx pré>

si j'ajoute une méthode égale () comme ceci: p> xxx pré>

sortie: p>

1


5 commentaires

Ce n'est pas correct. Il peut y avoir deux objets différents avec le même hashcode.


Ceci est une erreur. La méthode est utilisée pour déterminer l'identité d'objet dans hashmaps .


@Bohemian - encore une fois pas parfaitement correct. Vous ne connaissez pas le résultat des égaux. Cela peut être remplacé puis il ne comparera pas de références.


Les gars, c'est exactement ce qu'il a dit: "... parce qu'ils ne sont pas égaux ()."


@Alexr - mais il ne sait pas que :) Avec le dernier édition, ça va et je vais enlever mon bowvote :)



32
votes

Il peut y avoir deux éléments différents avec le même hashcode. Donc, votre réponse est incorrecte. La seule chose garantie est que si deux éléments ont différents hashcodes, ils sont différents. Lorsque deux éléments ont le même hashcode, Java utilise l'équivalent à une différence supplémentaire.

La réponse est donc un ou deux objets.


1 commentaires

@Readers - Découvrez le code source de hashmap.put (k , V) pour des preuves. +1 pour la réponse.



3
votes

Il y aura un ou deux objets dans le hashmap.

Si les deux objets ne sont pas égaux, c'est-à-dire ! A.Equals (b) , les deux seront stockés.


0 commentaires

2
votes

Non, le hashcode est une recherche initiale pour l'efficacité, mais sauf si a.equals (b) == vrai il y aura deux entrées


0 commentaires

0
votes

Il existe un ou deux objets de clé en fonction des A.Equaux (B) et d'une ou deux objets de valeur en fonction d'un == b.


0 commentaires