Aus Set contains verwenden und welche überschreiben...

Romsl

Erfahrenes Mitglied
Hi,

ich habe folgendes Problem. Es gibt eine Bean die ein Set beinhaltet. Diese Bean ist persistent in der Datenbank gespeichert. Jetzt besorge ich mir anhand des Keys die Bean aus der DB (oder evtl null falls nicht vorhanden), dann werden jeweils andere Beans erzeugt und mit Daten gefüllt (die Bean erhält die id von der DB zugewiesen, deshalb ist diese Property noch nicht gesetzt). Jetzt möchte ich überprüfen ob das Set schon eine solche Bean enthält oder ob ich diese ins Set mit aufnehmen muss.

Welche Methoden muss ich in der Bean überschreiben um das contains eines Sets zu verwenden?
 
Hallo!

Dann scheint wohl deine hashcode() Implementierung nicht richtig zu funktionieren.
HashSet verwendet intern eine HashMap zum speichern der Elemente. Diese Implementierung sieht zwei Elemente als "gleich" an wenn sie beide den selben hashcode() erzeugen.

Gruß Tom
 
meine überschriebene hashCode Implementierung sieht wie folgt aus.

Code:
public int hashCode() {
        int code = types.hashCode() + descriptions.hashCode();;

        System.out.println("CODE EXPORT_DEF_TPL [" + types + ", " + descriptions + "]: " + code);

        return code;
    }
 
Hallo!

types.hashCode() + descriptions.hashCode();
Wie schauen denn die Implementierungen der beiden hashCode() Methoden aus?
Sind das die Implementierungen von Object? Das wird dann nicht funktionieren...
Implementiere hashCode() so, dass alle Attribut Werte bzw. die Attribut Werte die eindeutig eine Geschäftsobjekt Identifizieren (BusinessKey) in die Berechnung des hashCode() einfließen. Weiterhin sollte man wenn man hashCode() überschreibt immer equals( ...) mit überschreiben. Die Ergebnisse von equals und hashcode sollten korrespondieren, dass heißt wenn zwei Objekte laut equals gleich sind sollten ihre hashCode()-Werte auch übereinstimmen.

siehe auch:
http://www.langer.camelot.de/Articles/JavaSpektrum/01.Equals-Part1/01.Equals1.html
http://www.langer.camelot.de/Articles/JavaSpektrum/02.Equals-Part2/02.Equals2.html
http://www.langer.camelot.de/Articles/JavaSpektrum/03.HashCode/03.HashCode.html#Kreft1

Gruß Tom
 
Zurück