K
Kubus
Gast
Hallo zusammen!
Ich habe folgendes Problem: Ich füge eine Reihe von Objekten in ein TreeSet ein. Diese Objekte verändern sich während der kompletten Laufzeit nicht, alle Felder sind final. Allerdings nimmt der verwendete Comparator einen Wert aus einer anderen Klasse, multipliziert diesen mit zwei Feldern der Objekte und ermittelt somit welches von beiden größer ist. Dafür hat der Comparator eigens eine Klassenvariable mitbekommen, die entsprechend geupdatet wird.
Leider befinden sich nach einigen Iterationen aber Datenleichen im Set, dh. Objekte sind doppelt vorhanden. Dies stört den weitern Ablauf meines Programms.
Es wird wahrscheinlich daran liegen, dass die entsprechenden Objekte nun nach Meinung des Sets nicht mehr gleich sind, da die berechneten Werte ja nicht übereinstimmen. Hat jemand eine Idee wie ich dies möglichst effizient umgehen könnte? Bislang filtere ich das Set per Hand nach indem ich alles entferne, prüfe und dann neu einfüge. Dies ist aber natürlich mit Laufzeiteinbußen verbunden.
Minimalbeispiel Comparator:
Ich habe folgendes Problem: Ich füge eine Reihe von Objekten in ein TreeSet ein. Diese Objekte verändern sich während der kompletten Laufzeit nicht, alle Felder sind final. Allerdings nimmt der verwendete Comparator einen Wert aus einer anderen Klasse, multipliziert diesen mit zwei Feldern der Objekte und ermittelt somit welches von beiden größer ist. Dafür hat der Comparator eigens eine Klassenvariable mitbekommen, die entsprechend geupdatet wird.
Leider befinden sich nach einigen Iterationen aber Datenleichen im Set, dh. Objekte sind doppelt vorhanden. Dies stört den weitern Ablauf meines Programms.
Es wird wahrscheinlich daran liegen, dass die entsprechenden Objekte nun nach Meinung des Sets nicht mehr gleich sind, da die berechneten Werte ja nicht übereinstimmen. Hat jemand eine Idee wie ich dies möglichst effizient umgehen könnte? Bislang filtere ich das Set per Hand nach indem ich alles entferne, prüfe und dann neu einfüge. Dies ist aber natürlich mit Laufzeiteinbußen verbunden.
Minimalbeispiel Comparator:
Java:
private class COComparator implements Comparator<CompObject>
{
private double x;
public int compare(CompObject first, CompObject second)
{
double resFirst = first.field()*x;
double resSecond = second.field()*x;
if(resFirst == resSecond)
return 0;
else
return (resFirst < resSecond) ? -1 : 1;
}
}