Interview Frage zu java hashcode ()

8

Ich habe kürzlich an einem Interview teilgenommen und folgende Frage gestellt:

Es gibt zwei Objekte mit demselben Hashcode. Ich füge diese beiden Objekte in eine Hashmap ein.

hMap.put(a,a); hMap.put(b,b);

wo a.hashCode()==b.hashCode()

Jetzt sagen Sie mir, wie viele Objekte werden in der hashmap da sein?

Ich antwortete, dass es nur ein Objekt geben wird, da die Hashcodes gleich sind, die beiden Objekte gleich sind und hashmap keine doppelten Schlüssel erlaubt. Bitte sagen Sie mir, ob mein Verständnis stimmt oder nicht?

    
Ammu 14.07.2011, 10:32
quelle

5 Antworten

32

Es kann zwei verschiedene Elemente mit demselben Hashcode geben. Deine Antwort ist also falsch. Das einzige, was garantiert ist, ist, dass, wenn zwei Elemente unterschiedliche Hashcodes haben, sie unterschiedlich sind. Wenn zwei Elemente den gleichen Hashcode haben, verwendet Java den Equals zur weiteren Unterscheidung.

Also die Antwort ist ein oder zwei Objekte.

    
Petar Minchev 14.07.2011, 10:34
quelle
3

Es wird ein oder zwei Objekte in der hashmap geben.

Wenn die beiden Objekte nicht gleich sind, zB !a.equals(b) , werden beide Objekte gespeichert.

    
Tom Jefferys 14.07.2011 10:35
quelle
2

Nein, der hashCode ist eine initiale Suche nach Effizienz, aber solange a.equals(b)==true nicht existiert, gibt es zwei Einträge

    
Sean Patrick Floyd 14.07.2011 10:35
quelle
1

Es gibt zwei Objekte in der Hashmap, weil sie nicht equals() sind.

Hier ist der Beweis:

%Vor%

Ausgabe:

%Vor%

Wenn ich eine equals () Methode wie folgt hinzufügen:

%Vor%

Ausgabe:

%Vor%

Laut javadoc für Object.equals () :

  

Beachten Sie, dass es im Allgemeinen notwendig ist, die Methode hashCode zu überschreiben, wenn diese Methode überschrieben wird, um den allgemeinen Vertrag für die Methode hashCode beizubehalten, die besagt, dass gleiche Objekte gleiche Hashcodes haben müssen.

Dies bedeutet, nicht bedeutet jedoch, dass zwei Objekte, die nicht equals() sind, nicht denselben Hashcode verwenden können.

    
Bohemian 14.07.2011 10:34
quelle
0

Abhängig von a.equals (b) gibt es entweder ein oder zwei Schlüsselobjekte und je nach a == b.

ein oder zwei Wertobjekte     
EJP 15.07.2011 01:28
quelle

Tags und Links