tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
1254
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    soeni1987 soeni1987 ist offline Mitglied Silber
    Registriert seit
    Mar 2006
    Beiträge
    79
    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?
     

  2. #2
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    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.html
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  3. #3
    soeni1987 soeni1987 ist offline Mitglied Silber
    Registriert seit
    Mar 2006
    Beiträge
    79
    Danke, aber irgendwie werde ich aus dem codebeispiel nicht schlau.

    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;
                            }
            }
    1. Wie kann ich der Methode meinen zu verschlüsselnden Inhalt geben?
    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
     

  4. #4
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    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

  5. #5
    Avatar von matdacat
    matdacat matdacat ist offline Mitglied Platin
    Registriert seit
    Aug 2004
    Beiträge
    672
    Genau. Und damit das Ganze generisch funktioniert, holst Du Dir am besten mittels Reflection die Membervariablen bzw. deren Werte.
     

  6. #6
    Florian089 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.
     

  7. #7
    Florian089 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

  1. hashCode()
    Von Maddimini im Forum Java
    Antworten: 6
    Letzter Beitrag: 03.01.11, 15:11
  2. Frage zu hashCode-Operatoren
    Von willi_igel im Forum Java
    Antworten: 2
    Letzter Beitrag: 19.04.10, 19:39
  3. hashCode()
    Von chickenwings im Forum Java
    Antworten: 6
    Letzter Beitrag: 25.01.06, 08:29
  4. HashCode() eines int[ ] Arrays
    Von -ben- im Forum Java
    Antworten: 4
    Letzter Beitrag: 04.12.05, 18:07
  5. Wie generiere ich den HashCode korrekt?
    Von -ben- im Forum Java
    Antworten: 3
    Letzter Beitrag: 16.10.05, 17:01