HashMap - put() reagiert nicht?

M

Masterand

Gast
Hallo Miteinander,
ich schreibe an einem etwas umfangreicheren Projekt (Abschlussarbeit, bin aber kein Informatiker) und habe auch schon das eine oder andere programmiert. Da es aber "nur" um HashMap put() geht muss ich mich wohl bei den Anfängerthemen einreihen...

Folgender Code:

Java:
ladeflaechen ist HashMap<Ladeflaeche,ULD>
lf ist Ladeflaeche
coordULD.uld ist ULD (bzw erbt von ULD)

Schleife,IF usw{
ladeflaechen.put(lf,coordULD.uld);
System.out.println("Ja, "+lf+" vorhanden: "+ladeflaechen.keySet());
}

Ausgabe aus 2 Durchläufen (Code aussenrum und auch diese Schleife liefen schon sehr häufig, ladeflaechen ist frisch initialisiert)
Ja, 120,0,0:99880x1000 vorhanden: [120,0,0:99880x1000]

Ja, 0,100,0:120x900 vorhanden: [120,0,0:99880x1000]
Sonstige Erklärungen: Die Zahlenfolge der Ausgabe ist jeweils ein Element lf.toString() (für Interessierte: x,y,z:LängexBreite)

Warum fügt put() im zweiten Durchlauf nichts hinzu? Überschreiben gäbe es ja Ansatzpunkte für die Bugsuche, aber gar keine Veränderung?

Der Fehler tritt nur sehr selten auf (wenn, dann aber immer an fast der gleichen Stelle), deshalb ist auch kein Minimalbeispiel möglich. Sehr selten heißt: bei geschätzt über 1 Mio put() 6-8 Mal.

Gibt es irgendwelche logischen Erklärungen warum put zu keiner Veränderung führt? Weder google noch API haben mich weitergebracht. Vielleicht sehe ich auch den Wald vor lauter Bäumen nicht...

Gruß Mathias


PS: Obiges Beispiel ist natürlich zu wenig, um das Problem zu lösen. Mir reicht schon jeder Tip, wo ich bei der Bugsuche weitermachen kann. Auf diese beiden Zeilen habe ich es meiner Meinung nach eingegrenzt. - Ich bin für alles dankbar, auch wenn mir nur gezeigt wird, warum in der Eingrenzung nicht unbedingt ein Fehler liegen muss. Es können beliebige Annahmen getroffen werden, um das Phänomen zu erklären ;)
 
M

Masterand

Gast
Java:
public int hashCode(){
	int result=0;
	result=x+laenge/2+1000*(y+breite/2)+1000000*z;
	return result;
}
	
public boolean equals(Object vergleich){
	if(vergleich.hashCode()!=hashCode()){
		return false;
	}
	if(vergleich.getClass()==this.getClass()){
		return true;
	}
	return false;
}


Meiner Meinung nach ja - aber selbst wenn nicht: Dann würde put() doch ersetzen, oder?

Aber: Es stimmt, als ich HashCode() geschrieben habe bin ich noch von Werten für x/y/z+laenge/breite<1000 ausgegangen, das stimmt hier nicht mehr...
Von Hand nachgerechnet: Die HashCodes sind unterschiedlich.
 
M

Masterand

Gast
Nachtrag: Die Hash-Codes sind doch gleich.

Dann habe ich die API wohl falsch verstanden - ich dachte, er würde bei gleichem Hash-Code den alten Key rausschmeißen.

Problem ist damit vermutlich gelöst, ich ändere HashCode() und melde mich nochmal.
 

Landei

Top Contributor
Aha, es müssen also nur hashCodes und Klassen gleich sein, schon sind beide Objekte gleich?

Falls deine IDE das kann, würde ich die mal equals und hashCode implementieren lassen, und noch mal versuchen.
 
M

Masterand

Gast
Damit ist es gefunden - und mit dem Hinweis auf equals auch erklärbar, vielen Dank.

Zusammenfassung:
Beim Schreiben des HashCodes war HashCode Eindeutig (x,y,z aufgrund der Anforderungen aussreichend klein), entsprechend konnte aus equals so implementiert werden.
Durch neue Anforderung waren größere x,y,z möglich, die identische HashCodes für verschiedene Objekte und damit auch equals()=true produzieren konnten.

Die API habe ich insofern falsch (bzw nicht genau genug) gelesen, dass bei identischem Schlüssel nur der neue Wert, nicht aber der neue Schlüssel (ist ja auch sinnlos wenn er tatsächlich gleich gewesen wäre) durch den put()-Befehl in die HashMap geschrieben werden.

Nochmal vielen Dank,

Mathias
 

tfa

Top Contributor
Beim Schreiben des HashCodes war HashCode Eindeutig (x,y,z aufgrund der Anforderungen aussreichend klein), entsprechend konnte aus equals so implementiert werden.
Grundsätzlich können verschiedene Objekte auch identische Hashcodes haben. Ich hoffe, du hast deine equals-Methode auch verbessert. Der Tipp von Landei mit der IDE ist gut.
 
S

Spacerat

Gast
Möglicherweise sind "hashCode()" und "equals()" ja hier gar nicht so interessant, weil verschiedene Transporter (Instanzen) Ladeflächen mit identischen Ausmaßen haben können. Allerdings wäre dann eine IdentityHashMap angebracht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Java Object to Hashmap ? Java Basics - Anfänger-Themen 6
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
krgewb HashMap Java Basics - Anfänger-Themen 2
B Hashmap richtig bauen, die Tripel auf Zahl abbildet? Java Basics - Anfänger-Themen 10
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
berserkerdq2 Hashmap, wie prüfe ich ob ein Key schon existiert Java Basics - Anfänger-Themen 19
S Durch HashMap iterieren Java Basics - Anfänger-Themen 8
rafi072001 Sortieren einer HashMap nach Values Java Basics - Anfänger-Themen 2
F gson mit einer Hashmap Java Basics - Anfänger-Themen 2
J JSON-HashMap Java Basics - Anfänger-Themen 3
J Hashmap Java Basics - Anfänger-Themen 13
C Hashmap zickt Java Basics - Anfänger-Themen 9
S HashMap contains() Methode Java Basics - Anfänger-Themen 1
Z Satz aufteilen und die Wörter zählen (HashMap) Java Basics - Anfänger-Themen 15
N enum Attribut von Objekten einer Hashmap ausgeben Java Basics - Anfänger-Themen 6
P Verschachtelte Hashmap Java Basics - Anfänger-Themen 6
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
B HashMap alphabetisch sortieren Java Basics - Anfänger-Themen 2
J HashMap Java Basics - Anfänger-Themen 6
M Enum-Variable HashMap zuweisen Java Basics - Anfänger-Themen 5
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
N HashMap in List good practice? Java Basics - Anfänger-Themen 2
K Value eines HashMaps in einer HashMap wiedergeben. Java Basics - Anfänger-Themen 5
O Hashmap, ArrayList, LinkedList Java Basics - Anfänger-Themen 7
O HashMap - ArrayList Java Basics - Anfänger-Themen 29
J Hashmap langsamer als compareTo? Java Basics - Anfänger-Themen 23
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
J Erhöhen eines Values als Integer bei gleichen Keys in HashMap Java Basics - Anfänger-Themen 12
N Methoden HashMap interne Werte miteinander vergleichen Java Basics - Anfänger-Themen 7
W The type Long is not visible HashMap Java Basics - Anfänger-Themen 4
M Objekt mit Hashmap vergleichen Java Basics - Anfänger-Themen 22
S Gibt es für die Klasse HashMap Generic Implementierungen? Java Basics - Anfänger-Themen 11
C HashMap - alle keys haben values der letzten put-Anweisung Java Basics - Anfänger-Themen 3
J Hashmap auslesen Java Basics - Anfänger-Themen 7
F HashMap sortieren <String, Long> Java Basics - Anfänger-Themen 3
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
shiroX Methoden Morse-Code Übersetzer mit HashMap Java Basics - Anfänger-Themen 5
E HashMap Problem Java Basics - Anfänger-Themen 5
P Hashmap anstatt LinkedList? Java Basics - Anfänger-Themen 6
T HashMap und die Methoden Java Basics - Anfänger-Themen 13
N Methoden Interaktives PDF mit HashMap befüllen Java Basics - Anfänger-Themen 0
Z Hashmap auseinandernehmen und analysieren Java Basics - Anfänger-Themen 7
B Durchlaufen von Hashmap und Arraylist Java Basics - Anfänger-Themen 8
F HashMap oder welches Array? Java Basics - Anfänger-Themen 4
T HashMap Java Basics - Anfänger-Themen 24
L Hashmap mit variablem Key Java Basics - Anfänger-Themen 9
M Collections Probleme mit Hashmap Java Basics - Anfänger-Themen 4
N Collections String in HashMap umwandeln Java Basics - Anfänger-Themen 3
Z HashMap richtig benutzen Java Basics - Anfänger-Themen 2
lgund HashMap // TS3 Query Java Basics - Anfänger-Themen 7
Z Hashmap Iterator löscht nicht Java Basics - Anfänger-Themen 8
E Hashmap Wert auslesen Java Basics - Anfänger-Themen 2
S Printstream für einen Hashmap Loop Java Basics - Anfänger-Themen 1
dat_vin OOP Hashmap und Attribute Java Basics - Anfänger-Themen 7
C Check ob eine HashMap schon existiert Java Basics - Anfänger-Themen 16
P Vererbung Eigene HashMap Variante Java Basics - Anfänger-Themen 2
R Hashmap in anderer Klasse nicht benutzbar Java Basics - Anfänger-Themen 1
T Java Hashmap Java Basics - Anfänger-Themen 3
L Gibt es etwas wie "HashMap <String, String, String> Java Basics - Anfänger-Themen 9
K HashMap mit Daten aus ArrayList befüllen Java Basics - Anfänger-Themen 14
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
O HashMap Fragen Java Basics - Anfänger-Themen 8
T HashMap Werte einfügen, durchsuchen und auslesen Java Basics - Anfänger-Themen 17
M Semantisches Problem HashMap/Netzwerk Java Basics - Anfänger-Themen 4
D HashMap Keys durchlaufen Java Basics - Anfänger-Themen 2
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
M HashMap keys ausgeben Java Basics - Anfänger-Themen 2
S In einer Hashmap Klassen regestrieren Java Basics - Anfänger-Themen 2
H Collections Was ist schneller - HashMap + Sort v TreeMap? Java Basics - Anfänger-Themen 75
F HashMap nach kleinstem Value durchsuchen Java Basics - Anfänger-Themen 11
G HashMap Java Basics - Anfänger-Themen 6
F Wortpaare - HashMap - ArrayList Java Basics - Anfänger-Themen 6
M HashMap Frage Java Basics - Anfänger-Themen 3
N Cast eines Objektes in eine Hashmap Java Basics - Anfänger-Themen 13
A CSV Zeilenweise einlesen und in einer HashMap speichern Java Basics - Anfänger-Themen 12
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
K HashMap auf leere Key-Value-Paare prüfen Java Basics - Anfänger-Themen 14
F Hilfe bei der HashMap. Java Basics - Anfänger-Themen 3
F HashMap vs. TreeMap Java Basics - Anfänger-Themen 5
B HashMap Java Basics - Anfänger-Themen 9
C Collections String[] als value in HashMap Java Basics - Anfänger-Themen 6
V Hashmap Iterieren Java Basics - Anfänger-Themen 4
C Csv File in Hashmap ausgeben Java Basics - Anfänger-Themen 14
T HashMap<String,Object> Werte auslesen Java Basics - Anfänger-Themen 5
I HashMap sortieren Java Basics - Anfänger-Themen 10
I HashMap Java Basics - Anfänger-Themen 11
H Collections Brauche modifizierte HashMap Java Basics - Anfänger-Themen 6
H TreeMap/HashMap synchronisieren Java Basics - Anfänger-Themen 2
A Datentypen Hashmap to Array Java Basics - Anfänger-Themen 11
D HashMap überschreibt Werte Java Basics - Anfänger-Themen 7
pg1337 Interface Comparable-Interface bei HashMap Java Basics - Anfänger-Themen 21
D erweiterte hashmap Java Basics - Anfänger-Themen 5
H HashMap<Int, String> - Er findet die Int-Klasse nicht. Java Basics - Anfänger-Themen 3
L HashMap zu JList Java Basics - Anfänger-Themen 6
S Erste Schritte HashMap Kurze Frage - Werte über Schleife ausgeben Java Basics - Anfänger-Themen 30
F Collections ArrayList oder Hashmap mittel Collections.sychronised Java Basics - Anfänger-Themen 6
B Klassen HashMap Zwei Objekte, gleicher Key Java Basics - Anfänger-Themen 4
N HashMap fehlerhafte Rückgabe Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben