hashCode-Vertrag in Sets
HashSet/HashMap: zuerst hashCode für den Bucket, dann equals innerhalb der Kette. Vertrag: equals true => gleicher hashCode.
Mutable Schlüssel nach dem Einfügen zu ändern ist ein Fehler.
Wo gebraucht
Produktive HashMap-Korrektheit hängt am Vertrag. Falsche hashCode-Streuung erzeugt Hotspots und Latenzspikes unter Last.
Vertiefung
Hashbasierte Sets benutzen Hashwert und Gleichheit gemeinsam. Objekte, die nach equals als identisch gelten, müssen in dieselbe Suchregion gelangen. Umgekehrt dürfen verschiedene Objekte denselben Hashwert besitzen; die Datenstruktur löst diesen Fall durch zusätzliche Vergleiche.
Felder, die equals beeinflussen, sollten während der Mitgliedschaft in einem HashSet nicht verändert werden. Sonst wurde das Objekt unter einer alten Zuordnung abgelegt, während eine spätere Suche eine andere Position untersucht. Der Eintrag ist dann vorhanden, aber über die normale Suche kaum noch erreichbar.
Schwierigkeitsstufen
- Konsistenzanforderungen zwischen equals und hashCode prüfen.
- Die Wirkung eines veränderlichen Schlüsselfeldes nachvollziehen.
- Geeignete unveränderliche Schlüsseltypen entwerfen.
Fallstricke
Eine häufige Fehlannahme ist, dass verschiedene Objekte zwingend verschiedene Hashwerte brauchen. Schädlicher ist die Gegenrichtung: logisch identische Schlüssel mit widersprüchlicher Zuordnung können gleichzeitig im Set erscheinen.
Tasks
Card Info
- Topic: Algorithmen und Datenstrukturen
- Difficulty: Beginner
- Completed: 0 users