T
Tersus
Gast
Grüßt euch,
mir ist bewusst, dass gleiche (im Sinne von equals()) Objekte unbedingt den selben HashCode haben sollten bzw. haben müssen und dass Objekte mit selben HashCode nicht gleich sein müssen.
Objekte mit selbigem HashCode landen im selben Bucket, der/die/das möglichst wenig Elemente beinhalten sollte, da innerhalb dieses Buckets die Objekte langsam mittels equals() verglichen werden, um das richtige Objekt zu finden.
Am besten also ein eindeutiger HashCode. Das ist mir soweit klar wie ein Kristall sein sollte.
Nun zu meiner Frage:
In einer Datenbank hat jede Entität eine eindeutige ID. Ich nehme mal beispielhaft die Entität Tier.
Als Klasse mit folgenden spontanen Attributen:
Wenn ich also im Programm mit Objekten vom Typ "Tier" arbeite, die aus der Datenbank kommen, dann gilt die Regel, dass Instanzen mit selbiger id gleich sein sollen, auch wenn die restlichen Attribute nicht überein stimmen.
Reicht es in diesem Fall, die HashCode-Methode wie folgt zu überschreiben?
Meine Motivation ist folgende. Wenn ich eine HashMap erstelle, in der ich z.B. jedem Tier eine Menge von Pflegern zu ordnen möchte, dann kann ich mir die Menge der Pfleger lediglich über die id des Tieren geben lassen, ohne den Rest vom Tier zu kennen.
Pseudo-Darstellung
HashMap: Tier --> Menge von Pflegern
Ich kann mir so recht schnell die Pfleger geben lassen, in dem ich ein neues Tier erzeuge, welches lediglich eine id hat.
Etwas konkreter:
Mein guter Hund Hasso hat die id = 4. Mehr weiß ich von ihm nicht. Wenn ich nun seine Pfleger finden möchte, dann mache ich folgendes:
Auch noch mal zur equals-Methode. Würde ich hier Gleichheit in Bezug auf alle Attribute beziehen, würde dieser code natürlich nicht funktionieren.
mir ist bewusst, dass gleiche (im Sinne von equals()) Objekte unbedingt den selben HashCode haben sollten bzw. haben müssen und dass Objekte mit selben HashCode nicht gleich sein müssen.
Objekte mit selbigem HashCode landen im selben Bucket, der/die/das möglichst wenig Elemente beinhalten sollte, da innerhalb dieses Buckets die Objekte langsam mittels equals() verglichen werden, um das richtige Objekt zu finden.
Am besten also ein eindeutiger HashCode. Das ist mir soweit klar wie ein Kristall sein sollte.
Nun zu meiner Frage:
In einer Datenbank hat jede Entität eine eindeutige ID. Ich nehme mal beispielhaft die Entität Tier.
Als Klasse mit folgenden spontanen Attributen:
Code:
Tier(long _id_, String name, byte anzahlBeine, String felldichte, Art art, ... )
Reicht es in diesem Fall, die HashCode-Methode wie folgt zu überschreiben?
Code:
@Override
public int hashCode() {
return (int) this.id;
}
Meine Motivation ist folgende. Wenn ich eine HashMap erstelle, in der ich z.B. jedem Tier eine Menge von Pflegern zu ordnen möchte, dann kann ich mir die Menge der Pfleger lediglich über die id des Tieren geben lassen, ohne den Rest vom Tier zu kennen.
Pseudo-Darstellung
HashMap: Tier --> Menge von Pflegern
Ich kann mir so recht schnell die Pfleger geben lassen, in dem ich ein neues Tier erzeuge, welches lediglich eine id hat.
Etwas konkreter:
Mein guter Hund Hasso hat die id = 4. Mehr weiß ich von ihm nicht. Wenn ich nun seine Pfleger finden möchte, dann mache ich folgendes:
Code:
// gegeben
Map<Tier, Set<Pfleger>> hashMap = new HashMap<>();
// Jedem konkreten Tier werden Pfleger zugeordnet
...
// Ich weiß von meinem Hund, dessen Pfleger ich suche, nur noch die id
Set<Pfleger> pflegerVonHasso = hashMap.get(new Tier(4l));
Auch noch mal zur equals-Methode. Würde ich hier Gleichheit in Bezug auf alle Attribute beziehen, würde dieser code natürlich nicht funktionieren.