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?
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.
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.
Nein, der hashCode ist eine initiale Suche nach Effizienz, aber solange a.equals(b)==true
nicht existiert, gibt es zwei Einträge
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.
Tags und Links java collections