R
RalleII
Gast
Hallo,
ich habe eine Frage zu einem Hinweis den man in der Compareable-API findet (bzw. hier aus dem Java ist auch eine Insel Buch):
"Wichtig ist neben einer Implementierung von compareTo() auch die passende Realisierung in equals(). Sie ist erst dann konsistent, wenn e1.compareTo(e2) == 0 das gleiche Ergebnis wie e1.equals(e2) liefert, wobei e1 und e2 den gleichen Typ besitzen. Ein Verstoß gegen diese Regel kann bei sortierten Mengen schnell Probleme bereiten"
Hm, was kann passieren wenn man das nicht befolgt?
Was ich habe:
Ich habe eine Hilfsstruktur in der ich paar Dinge speicher. Unter anderem ein long-Wert, in dem der Zeitpunkt der letzten Änderung steht.
Nun habe ich bewusst dieser Hilfsstruktur das Compareable-Interface spendiert, dass die Reihenfolge bezüglich des Änderungszeitpunkt zurückgibt.
Das habe ich so gemacht, damit mein TreeSet nach dem Änderungszeitpunkt sortiert ist.
Aber die equals-Methode hat bei mir nichts damit zu tun. Sollten 2 Objekte in der gleichen Millisekunde verändert werden (was aber unwahrscheinlich ist) würde compareTo 0 zurück geben aber da sie nicht gleich sind würde equals false zurückgeben.
Bis jetzt habe ich keine Probleme damit (wahrscheinlich weil es so gut wie nie vorkommt, dass es zwei Objekte mit dem gleichen Änderungszeitpunkt gibt) aber mit welchen Problemen muss ich rechnen?
Wie kann ich das Problem eleganter lösen?
Danke
ich habe eine Frage zu einem Hinweis den man in der Compareable-API findet (bzw. hier aus dem Java ist auch eine Insel Buch):
"Wichtig ist neben einer Implementierung von compareTo() auch die passende Realisierung in equals(). Sie ist erst dann konsistent, wenn e1.compareTo(e2) == 0 das gleiche Ergebnis wie e1.equals(e2) liefert, wobei e1 und e2 den gleichen Typ besitzen. Ein Verstoß gegen diese Regel kann bei sortierten Mengen schnell Probleme bereiten"
Hm, was kann passieren wenn man das nicht befolgt?
Was ich habe:
Ich habe eine Hilfsstruktur in der ich paar Dinge speicher. Unter anderem ein long-Wert, in dem der Zeitpunkt der letzten Änderung steht.
Nun habe ich bewusst dieser Hilfsstruktur das Compareable-Interface spendiert, dass die Reihenfolge bezüglich des Änderungszeitpunkt zurückgibt.
Das habe ich so gemacht, damit mein TreeSet nach dem Änderungszeitpunkt sortiert ist.
Aber die equals-Methode hat bei mir nichts damit zu tun. Sollten 2 Objekte in der gleichen Millisekunde verändert werden (was aber unwahrscheinlich ist) würde compareTo 0 zurück geben aber da sie nicht gleich sind würde equals false zurückgeben.
Bis jetzt habe ich keine Probleme damit (wahrscheinlich weil es so gut wie nie vorkommt, dass es zwei Objekte mit dem gleichen Änderungszeitpunkt gibt) aber mit welchen Problemen muss ich rechnen?
Wie kann ich das Problem eleganter lösen?
Danke