Liebe Java-Freunde,
immer wieder habe ich als Gast in dieses Forum geschaut und habe schon vieles lernen können, so dass ich denke, dass jetzt endlich der Zeitpunkt gekommen ist, mich auch zu registrieren.
Seit vorgestern hänge ich an einer Stelle und scheine mich im Kreis zu drehen. Es geht um ein Hashset, das Objekte der eigenen Klasse Kunde aufnimmt - aber keinerlei Duplikate aufnehmen soll. Ganz wichtig: Ein Duplikat soll nicht nur sein, wenn alle Werte übereinstimmen, sondern auch schon, wenn nur ein Wert doppelt vorkommt.
Der Programmablauf gestaltet sich so bei mir:
Die Klasse Kunde enthält neben einem Konstruktur mit 2 int-Parametern folgende Anweisungen bzgl. des Hassets:
Was bisher funktioniert: Es werden nur dann doppelte Einträge erkannt, wenn beide int-Parameter bereits mit einem Objekt übereinstimmen. Das macht rein logisch natürlich auch Sinn, weil erst dann ein Objekt gleich zu einem anderen ist. Aber es muss doch auch eine Möglichkeit geben, jeden Parameter einzeln zu betrachten, so dass "gleich" so defininiert wird, dass kein einziger Wert eines jeden Datenfeldes doppelt vorkommt, oder? Im oberen Bsp. (das so natürlich keinen Sinn macht, aber es dient lediglich zum Testen) sollen also auch lauter Duplikate erkannt werden (hier wäre es dann eine Endlosschleife), weil sich der erste int-Parameter (hier 500) beim Schleifendurchlauf ja nicht ändert. Stattdessen werden die Objekte aber munter aufgenommen und nur dann als Duplikate erkannt, wenn sich auch der zweite int-Parameter während des Schleifendurchlaus nicht ändert.
In Kürze: Wie kann ermöglicht werden, dass ein Objekt schon dann als Duplikat gilt, wenn nur einer der int-Parameter bereits vorhanden ist?
Ich habe schon einiges recherchiert und ausprobiert, komme aber einfach nicht auf eine Lösung und freue mich sehr auf eure Antworten.
immer wieder habe ich als Gast in dieses Forum geschaut und habe schon vieles lernen können, so dass ich denke, dass jetzt endlich der Zeitpunkt gekommen ist, mich auch zu registrieren.
Seit vorgestern hänge ich an einer Stelle und scheine mich im Kreis zu drehen. Es geht um ein Hashset, das Objekte der eigenen Klasse Kunde aufnimmt - aber keinerlei Duplikate aufnehmen soll. Ganz wichtig: Ein Duplikat soll nicht nur sein, wenn alle Werte übereinstimmen, sondern auch schon, wenn nur ein Wert doppelt vorkommt.
Der Programmablauf gestaltet sich so bei mir:
Java:
public Set<Kunde> kundenSet = new HashSet<Kunde>();
for (int i = 1; kundenSet.size() < 100; i++) {
kundenSet.add(new Kunde(500, 5 + i));
}
Die Klasse Kunde enthält neben einem Konstruktur mit 2 int-Parametern folgende Anweisungen bzgl. des Hassets:
Java:
@Override
public int hashCode() {
final int primStart = 31;
int resultat = 1;
resultat = primStart * resultat + kundenNr;
resultat = primStart * resultat + kundenPlz;
return resultat;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return false;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Kunde modelKunde = (Kunde)obj;
if (kundenNr != Kunde.kundenNr) {
return false;
} else {
return false;
}
}
Was bisher funktioniert: Es werden nur dann doppelte Einträge erkannt, wenn beide int-Parameter bereits mit einem Objekt übereinstimmen. Das macht rein logisch natürlich auch Sinn, weil erst dann ein Objekt gleich zu einem anderen ist. Aber es muss doch auch eine Möglichkeit geben, jeden Parameter einzeln zu betrachten, so dass "gleich" so defininiert wird, dass kein einziger Wert eines jeden Datenfeldes doppelt vorkommt, oder? Im oberen Bsp. (das so natürlich keinen Sinn macht, aber es dient lediglich zum Testen) sollen also auch lauter Duplikate erkannt werden (hier wäre es dann eine Endlosschleife), weil sich der erste int-Parameter (hier 500) beim Schleifendurchlauf ja nicht ändert. Stattdessen werden die Objekte aber munter aufgenommen und nur dann als Duplikate erkannt, wenn sich auch der zweite int-Parameter während des Schleifendurchlaus nicht ändert.
In Kürze: Wie kann ermöglicht werden, dass ein Objekt schon dann als Duplikat gilt, wenn nur einer der int-Parameter bereits vorhanden ist?
Ich habe schon einiges recherchiert und ausprobiert, komme aber einfach nicht auf eine Lösung und freue mich sehr auf eure Antworten.