HashCode überschreiben!

Status
Nicht offen für weitere Antworten.

Skull

Aktives Mitglied
Hallo, habe bereits erfolgreich die equals Methode für eines meiner Objekte umgeschrieben, bei HashCode habe ich aber so meine Probleme.

Mein Object hat 3 Strings, die gleich sein müssen, damit equals gleich ist. Wie erzeuge ich nun eine Hashfunktion, die für zwei Objekte, die die gleichen 3 Strings haben den gleichen HashCode liefert?
 

Wildcard

Top Contributor
Zum Beispiel so:
[HIGHLIGHT="Java"]int hashcode = string1.hashCode() + string2.hashCode() +string3.hashCode()[/HIGHLIGHT]
 

Ark

Top Contributor
Dir sollte hoffentlich aufgefallen sein, dass du hashCode() in Abhängigkeit von nur einem Objekt beschreiben musst.

Ich bin spontan für etwas dieser Art:
[HIGHLIGHT="Java"]return str1.hashCode() ^ str2.hashCode() ^ str3.hashCode();[/HIGHLIGHT]
Diese Funktion ist aber nur dann zu gebrauchen, wenn die Reihenfolge/Zuordnung keine Rolle spielt. Wenn sie doch eine Rolle spielt, würde ich eine andere Hashfunktion versuchen.

Ark

EDIT: Hui, das ging aber schnell. xD
 

Skull

Aktives Mitglied
Funktioniert leider nicht. Bekomme immernoch false, wenn ich das ganze in ner HashMap teste.
 

Skull

Aktives Mitglied
Myoject mo = new Myobject("A","B","C", "D");
Myoject mo2 = new Myobject("A","B","C", "Q");
HashMap hm = new HashMap();
hm.put(mo)
System.out.println(hm.containsKey(mo2));

D habe ich bei equals als irrelevant deklariert. Es geht also nur um die ersten drei Einträge


abgesehen davon ist die Reihenfolge auch nicht egal, es müssen die einzelnen Strings in der richtigen Reihenfolge sein. (ABC) != (ACB)

EDIT: Mein Fehler geht, aber Reihenfolge ist noch das Problem.
 
Zuletzt bearbeitet:

Skull

Aktives Mitglied
Wie wäre es hiermit?

String neu;

neu = String1 + String2+ String3;

return neu.hashCode();

müsste doch gehen oder nicht?
 

Ark

Top Contributor
Was du suchst, ist nicht zufälligerweise ein HashSet, oder? Und dass Myobject und Myobject2 zwei verschiedene Klassen sind und es deshalb zwei verschiedene hashCode()-Methoden zu implementieren gibt, ist dir auch klar? Und dass zwei verschiedene Typen in einem Set selten Sinn ergeben, weißt du auch, ja? Was bitte ist denn ein Myobject, und was ist ein Myobject2? Und du bist dir sicher, die Sache mit Klassen und Objekten richtig verstanden zu haben?

Seit Tiger gibt's auch typsichere Collections, da wäre so etwas, was du hier zeigst, nur sehr bedingt durchführbar ...

Ark
 

Skull

Aktives Mitglied
Es werden Objekte zwischen entfernten Endgeräten ausgetauscht. Ich habe zur Übertragung der Objekte nur die Möglichkeit diese per String zu übertragen, deshalb mache ich aus einem Objekt per toString einen String und nach der Übertragung wieder ein Objekt. Da nun das gleiche Objekt mehrfach übertragen wird, habe ich logischerweise jedesmal nach dem parsen ein neues Objekt und möchte prüfen ob es schon eine Instanz in der HashMap gibt, wenn ja dann mache dies, wenn nein, dann dies. In der Hashmap liegt auch nur eine Instanz....

Macht doch Sinn?!
 

Ebenius

Top Contributor
equals() sollte, von dem abgesehen was Ark schreibt, nicht true zurückgeben, wenn die Objekte nicht den selben Typ haben.

Ebenius
 

Skull

Aktives Mitglied
Sie haben den selben Typ :) und ich prüfe das auch per instanceof!


Edit: Ah jetzt verstehe ich eure Anmerkungen. habe bei dem vereinfachten Beispiel nen Fehler gemacht MyObject2 gibts nicht ;). Habs mal korrigiert.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Code:
Myoject mo = new Myobject("A","B","C", "D");
Myoject mo2 = new Myobject("A","B","C", "Q");

System.out.println("hashCode0 "+mo.hashCode());
System.out.println("hashCode1 "+mo2.hashCode());
System.out.println("equal? "+mo.equals(mo2));
--> Ausgabe?
 

Ark

Top Contributor
Edit: Ah jetzt verstehe ich eure Anmerkungen. habe bei dem vereinfachten Beispiel nen Fehler gemacht MyObject2 gibts nicht ;). Habs mal korrigiert.
Ich nehme mal an, du hast noch einen Fehler gemacht, denn put() ist in HashMap mit zwei Parametern definiert. ;)

Mich würde gerade zu sehr interessieren, wie der Code aussieht, denn aktuell kann ich nicht wirklich einen Fehler feststellen.

Ark

PS: Mann, das geht ja hier im Minutentakt. :)
 

Skull

Aktives Mitglied
Mein reales Beispiel ist etwas länger, deshalb habe ich hier eben schnell ein vereinfachtes hingeklickt. Das Forum hier ist aber leider nicht Eclipse *g*, weshalb ich hier schnell mal einige Fehler reingehauen habe (unter anderem auch das "put", ja *g*).

Die von dir vorgeschlagene Variante funktioniert, ich habe aber jetzt meine Variante genommen, da wie gesagt auch die Belegung der einzelnen Strings (also die Reihenfolge) eine Rolle spielt. Klappts jetzt alles wunderbar.

Danke an alle.
 

Ebenius

Top Contributor
Ich würde dafür nicht die Strings aneinanderhängen, weil das sehr teuer ist. Wenn die Reihenfolge für Dich wichtig ist, dann sollte einfach sowas funktionieren: [HIGHLIGHT="Java"]return 53 * s1.hashCode() + 17 * s2.hashCode() + s3.hashCode();[/HIGHLIGHT]

Ebenius
 

FArt

Top Contributor
Hm, worum geht es eigentlich?
Jede halbwegs sinnvolle IDE generiert doch den Käse, und zwar so dass es sinnvoll ist, konsistent ist und funktioniert.

Code:
  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof Blubb)) return false;

    Blubb blubb = (Blubb) o;

    if (!str1.equals(blubb.str1)) return false;
    if (!str2.equals(blubb.str2)) return false;
    if (!str3.equals(blubb.str3)) return false;

    return true;
  }

  @Override
  public int hashCode() {
    int result = str1.hashCode();
    result = 31 * result + str2.hashCode();
    result = 31 * result + str3.hashCode();
    return result;
  }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K equals() und hashcode() überschreiben Java Basics - Anfänger-Themen 5
S hashCode() überschreiben Java Basics - Anfänger-Themen 13
neurox Tutorial equals und hashCode überschreiben Java Basics - Anfänger-Themen 33
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
W Wann und warum hashcode und equals? Java Basics - Anfänger-Themen 14
S Hashcode-Berechnung + ^ Java Basics - Anfänger-Themen 2
S Interface Equals und hashCode Java Basics - Anfänger-Themen 16
L Logistiksystem Methode equals und hashcode Java Basics - Anfänger-Themen 20
W JUnit Test und HashCode Java Basics - Anfänger-Themen 14
G HashCode für Indexberechnung im Array Java Basics - Anfänger-Themen 2
E hashCode implementierung Java Basics - Anfänger-Themen 9
M hashcode Java Basics - Anfänger-Themen 3
T hashCode-Kontrakt Java Basics - Anfänger-Themen 1
Psypsy hashCode, equals und toString Java Basics - Anfänger-Themen 3
K hashCode, compareTo vs. equals Java Basics - Anfänger-Themen 3
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
T hashCode mit boolean Java Basics - Anfänger-Themen 1
M Frage zu HashCode Methode in Java Java Basics - Anfänger-Themen 7
M Hashcode als lesbarer String Java Basics - Anfänger-Themen 1
S Hashcode - Operator ^ Java Basics - Anfänger-Themen 11
G 64 Bit Hashcode erstellen aus String Java Basics - Anfänger-Themen 11
K hashCode() Java Basics - Anfänger-Themen 2
C hashCode() bei Klassen, die nicht immutable sind Java Basics - Anfänger-Themen 27
M Collections Problem bei Überschreibung von hashcode() und equals() bei Hashset-Implementierung Java Basics - Anfänger-Themen 5
H Hashcode aus Datei erzeugen Java Basics - Anfänger-Themen 7
B Hashcode Java Basics - Anfänger-Themen 25
T Code in hashCode Java Basics - Anfänger-Themen 2
T equals() und hashCode() Java Basics - Anfänger-Themen 7
A HashCode Überschreiben Java Basics - Anfänger-Themen 2
H Suche spezifische Eigenschaft von Object - sowas wie ".hashCode()" Java Basics - Anfänger-Themen 4
E Java hashCode equals Problem Java Basics - Anfänger-Themen 2
E hashCode bei Objekten Java Basics - Anfänger-Themen 14
B Frage zu equals() und hashCode() Java Basics - Anfänger-Themen 28
A veränderbar kanonische Klassen: Methode equals, hashcode, serializable Java Basics - Anfänger-Themen 5
M Fehler im HashCode()! Java Basics - Anfänger-Themen 12
S equals() - hashCode() - Contract Java Basics - Anfänger-Themen 54
D HashCode eines Objekts Java Basics - Anfänger-Themen 5
R Vergleiche mit Equals(), hashCode() und == Java Basics - Anfänger-Themen 10
M HashCode von java.io.File - Wurde die Datei geändert ? Java Basics - Anfänger-Themen 2
B Hashcode?Was ist das und wozu? Java Basics - Anfänger-Themen 2
W Equals-Methode überschreiben bei composition Java Basics - Anfänger-Themen 20
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
T Printwriter Datei nicht überschreiben Java Basics - Anfänger-Themen 10
JensXF Methode überschreiben, so richtig? Java Basics - Anfänger-Themen 4
E Slider - Wert übergeben und überschreiben Java Basics - Anfänger-Themen 5
E Ausgabe überschreiben Java Basics - Anfänger-Themen 15
L 2 Dimensional Array werte überschreiben Java Basics - Anfänger-Themen 1
F Variablen Werte einer Klasse überschreiben Java Basics - Anfänger-Themen 4
C Methoden überschreiben Java Basics - Anfänger-Themen 3
Jinnai4 Clipboard überschreiben? Java Basics - Anfänger-Themen 11
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
D .txt überschreiben mit BufferedWriter ohne reset Java Basics - Anfänger-Themen 6
neerual Feld mit Einsen und Nullen füllen und überschreiben Java Basics - Anfänger-Themen 1
N awt: vererbte Methode überschreiben Java Basics - Anfänger-Themen 3
M Zeile in datei überschreiben Java Basics - Anfänger-Themen 5
V Elemente aus einem Array mit null überschreiben Java Basics - Anfänger-Themen 4
F Werte in 2D-Array mit anderem 2D-Array überschreiben Java Basics - Anfänger-Themen 2
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
K StringBuilder Objekt überschreiben - Speicherverbrauch Java Basics - Anfänger-Themen 3
J JTable Wert gleich überschreiben Java Basics - Anfänger-Themen 6
K compareTo(String arg) überschreiben Java Basics - Anfänger-Themen 4
M Warum soll man die Finanlize Methode nicht überschreiben und aufrufen? Java Basics - Anfänger-Themen 2
P Fehler bei überschreiben eines Eintrags Java Basics - Anfänger-Themen 2
K Interface Methoden überschreiben Java Basics - Anfänger-Themen 1
B Werte eines Arrays überschreiben. Java Basics - Anfänger-Themen 3
L Eclipse Projekt überschreiben Java Basics - Anfänger-Themen 4
H Methoden "Leeren" Speicher auf der Festplatte überschreiben Java Basics - Anfänger-Themen 8
J Methode von Subklassen einzeln überschreiben Java Basics - Anfänger-Themen 12
R variable überschreiben schlägt fehl Java Basics - Anfänger-Themen 13
B To String Metode überschreiben? Java Basics - Anfänger-Themen 30
F Methode überschreiben Java Basics - Anfänger-Themen 9
X OOP Getter/Setter überschreiben den Wert ihrer Variablen nicht Java Basics - Anfänger-Themen 4
F Variablen String-Array wird ungewollt "überschreiben" Java Basics - Anfänger-Themen 7
A Eine Datei Lesen und bestimmte Position überschreiben Java Basics - Anfänger-Themen 2
M xml log4j überschreiben für/in Java Klassen Java Basics - Anfänger-Themen 4
D Methode überschreiben Java Basics - Anfänger-Themen 2
B Input/Output bestimmte Zeilen in .txt Dateinen überschreiben Java Basics - Anfänger-Themen 20
B JLabel löschen/überschreiben Java Basics - Anfänger-Themen 10
J Variablen überschreiben innerhalb einer Klasse Java Basics - Anfänger-Themen 7
B Wann toString() überschreiben? Java Basics - Anfänger-Themen 21
Z Kann actionPerformed(ActionEvent) nicht überschreiben Java Basics - Anfänger-Themen 8
4 sysout überschreiben Java Basics - Anfänger-Themen 2
M Equals überschreiben Java Basics - Anfänger-Themen 3
J Variablen überschreiben Java Basics - Anfänger-Themen 17
M Methode von einem Object überschreiben Java Basics - Anfänger-Themen 5
M OOP Methode überschreiben mit String-Paramter unterschiedlicher Größe? Java Basics - Anfänger-Themen 19
E Zeile innerhalb Datei überschreiben Java Basics - Anfänger-Themen 2
S Methode einer kompilierten .jar überschreiben Java Basics - Anfänger-Themen 9
c_sidi90 Excelfile bearbeiten ohne zu überschreiben? Java Basics - Anfänger-Themen 25
K Methode überschreiben - neuen Fehler Werfen? Java Basics - Anfänger-Themen 6
G Klasse überschreiben wenn Rückgabe über Methode Java Basics - Anfänger-Themen 6
A JFileChooser - ungefragtes überschreiben Java Basics - Anfänger-Themen 12
M .txt Datei überschreiben Java Basics - Anfänger-Themen 8
H jZable - Zelle direkt überschreiben Java Basics - Anfänger-Themen 3
F Verschachtelte Arrays kopieren und überschreiben Java Basics - Anfänger-Themen 4
I Variable überschreiben Java Basics - Anfänger-Themen 5
D toString überschreiben + Exception werfen Java Basics - Anfänger-Themen 3
calzone FileReader, lesen ohne die Datei zu überschreiben? Java Basics - Anfänger-Themen 3
S Welche Methode in JFrame überschreiben? Java Basics - Anfänger-Themen 12
B Klasse überschreiben Java Basics - Anfänger-Themen 15

Ähnliche Java Themen

Neue Themen


Oben