hashcode

manius

Mitglied
Hi,
ich habe da meine Probleme aus der gefundenen Quellen die zusammenhänge zu Hashcode zu verstehen ....
- jeder Object hatt ein hashcode .... (wird es automatisch Default berechnet ? )
- ich habe in verschiedenen Quellen von Überschreiben des hashCode gelesen.... aber wann macht man das ? wann ist das nötig ?
-wenn ich z.B. ein String Object habe, wird es automatisch ein hashCode erzeugt ? was ist mit meiner PersonClasse ?
- was ist wenn ich HashMap nutze ?

Thanks
 
Hallo,

in der Klasse Object wird die Methode hashCode() implementiert. Aber da hier keine sinnvollen Informationen vorliegen, hat diese Klasse keine andere Chance, als den Hash-Code aus der Speicheradresse des Objekts zu erzeugen. Zwei unterschiedliche Objekte mit gleichem Inhalt hätten also unterschiedliche Hash-Codes.
In deiner Personen-Klasse solltest du die Methode hashCode() überschreiben. Dabei greifst du auf die Member deiner Klasse (Vorname, Nachname, Geburtsdatum etc.) zu (am besten über den Hash-Code der Member). Dann bekommen unterschiedliche Objekte der Personen-Klasse mit gleichem Inhalt den gleichen Hash-Code.
Und du solltest gleichzeitig die Methode equals() überscheiben!

Gruß
Fritz
 
Man muss equals und hashcode nicht immer ueberschreiben, sondern nur dann wenn man Objecte der Klasse in einer Map oder in einem Set speichern will. Wenn man aber eine der beiden Methoden ueberschreibt, dann muss man auch die andere ueberschreiben. Andernfalls fuehrt das zu unbestimmten Zustaenden, wenn die Klasse dann in einer Map gespeichert wird.

Das ganze nennt sich equals-hashCode contract und ist in den Javadocs beschrieben: https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 

Zurück
Oben