hashCode-Kontrakt

Thisor

Bekanntes Mitglied
Hey, was genau ist denn der hashCode-Kontrakt? Und wieso sollte dieser eingehalten werden?
Ich habe folgende Definition vor mir liegen:

"Während der Ausführung eines Programms muss der Aufruf der Methode hashCode() für ein Objekt immer den gleichen Wert liefern.
Wenn a.equals(b) == true, dann muss auch
a.hashCode() == b.hashCode() gelten
Die Umkehrung muss nicht gelten: 2 Objekte mit dem gleichen Hashcode müssen nicht gleich sein!"

- Ich kann mir aber allerdings nicht vorstellen wann und wieso ich das anwenden soll, wenn es ja eh mit equals funktioniert. Und wieso es umgekehrt nicht gilt, ist mir auch ein rätsel 😕. Wenn ich b.equals(a) eingeben würde, würde ja immer noch true kommen..

lg
 
du hast das falsch verstanden. Mit "umgekehrt" ist nicht gemeint das du die Variablen tauschen sollst, sondern:
Wenn a.hashCode() == b.hashcode() gilt dann gilt nicht zwangsweise auch a.equals(b)

Der Hashcode contract sollte u.a. eingehalten werden, damit es auch ordentlich mit HashMaps und co funktioniert.

p.s.
Ansonsten solltest du dir vielleicht mal grundsätzlich anschauen, was denn ein hashcode überhaupt ist:
https://de.wikipedia.org/wiki/Hashfunktion
https://en.wikipedia.org/wiki/Java_hashCode()
 

Zurück
Oben