ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
1254
1254
EMPFEHLEN
-
Hallo,
bei meinem Studium soll ich eine Methode hashCode() implementieren welche zu einem Objekt des Typs Object einen Integerwert zurückliefert. Problem dabei ist: das ganze soll generisch sein, also für alle Typen die von Objects erben funktionieren.
Wie kann ich da rangehen? Hat da jemand ne Idee?
Danke schonmal.
PS: Ich weis, dass jedes Object automatisch eine hashCode() Methode hat, ich soll die aber selber implementieren.
PPS: Ich dachte schon an die ID des Objektes aber das würde ja nicht gehen oder? ich meine wenn ich zwei Objekte habe, welche den gleichen Inhalt haben müssen diese doch nicht zwangsläufig die gleiche ID haben oder?
-
09.06.09 20:54 #2
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.516
Hallo
in einer Doku zu Java steht bez. hashCode() folgendes:
http://www.geocities.com/technofundo...equalhash.htmlGrüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Danke, aber irgendwie werde ich aus dem codebeispiel nicht schlau.
1. Wie kann ich der Methode meinen zu verschlüsselnden Inhalt geben?Code java:1 2 3 4 5 6 7 8 9 10 11
public int hashCode() { int hash = 7; hash = 31 * hash + num; if(null == data){ return hash; }else{ hash = 31 * hash + data.hashCode(); return hash; } }
2. Sehe ich hier keine individiuelle Behandlung erkennen.
Fals DATA meine Daten sein sollen, warum sollten die denn irgendwann null werden? die Rekursion hat doch keinen Abbruch !Geändert von Oliver Gierke (10.06.09 um 07:12 Uhr) Grund: Code Tags spendiert
-
10.06.09 07:11 #4
Du schreibst hashCode für eine Klasse, d.h. du sollst einen Hash für das aktuelle Objekt berechnen. das tut man eben im allgemeinen in dem man bestimmte Membervariablen mit in die Berechnung einbezieht, andere evtl. nicht. in deinem Beispiel sind num und data eben Membervariablen der Klasse aus der du den Code hast.
DIE Referenz zum Thema ist übrigens Effective Java von Joshua Bloch. Das relevante Kapitel zu equals und hashCode gibt's hier: http://java.sun.com/developer/Books/...a/Chapter3.pdf
REINHAUN!In theory, there is no difference between theory and practice. In practice, there is!
www.olivergierke.de
-
Genau. Und damit das Ganze generisch funktioniert, holst Du Dir am besten mittels Reflection die Membervariablen bzw. deren Werte.
-
13.08.09 09:59 #6Florian089 Tutorials.de Gastzugang
Die Berechnung des Hashcodes sollte jedoch sehr performant erfolgen. Ich bin mir deswegen nicht sicher, ob die Benutzung von Reflection angebracht ist (auch wenn ich gerne so vorgehen würde!).
Eine deutsche Version des Bloch-Artikels gibt es übrigens hier:
http://www.angelikalanger.com/Articl....HashCode.html
Und im Apache Commons gibt es einen HashCodeBuilder, der nach dem Algorithmus von Bloch implementiert ist.
-
13.08.09 10:49 #7Florian089 Tutorials.de Gastzugang
Anmerkung: der HashCodeBuilder hat auch eine Methode für die Erstellung über Reflection!
HashCodeBuilder.reflectionHashCode(this)
Beachte allerdings die Anmerkung in der JavaDoc.
Ähnliche Themen
-
hashCode()
Von Maddimini im Forum JavaAntworten: 6Letzter Beitrag: 03.01.11, 15:11 -
Frage zu hashCode-Operatoren
Von willi_igel im Forum JavaAntworten: 2Letzter Beitrag: 19.04.10, 19:39 -
hashCode()
Von chickenwings im Forum JavaAntworten: 6Letzter Beitrag: 25.01.06, 08:29 -
HashCode() eines int[ ] Arrays
Von -ben- im Forum JavaAntworten: 4Letzter Beitrag: 04.12.05, 18:07 -
Wie generiere ich den HashCode korrekt?
Von -ben- im Forum JavaAntworten: 3Letzter Beitrag: 16.10.05, 17:01





Zitieren

Login





