BigDecimal in HashSet eingefügt, aber nicht in TreeSet

Status
Nicht offen für weitere Antworten.

André Uhres

Top Contributor
Wenn ich ein HashSet erzeuge und new BigDecimal("1.0") und new BigDecimal("1.00") einfüge, dann enthält der Set zwei Elemente.
Wenn ich das Gleiche jedoch mit einem TreeSet anstatt HashSet mache, dann enthält der Set nur ein Element.
Wie erklärt sich das unterschiedliche Verhalten?
 
HashSet nimmt nur die Kombination aus hashCode() und equals() um die Gleichheit zu ueberpruefen.

TreeSet nimmt die compareTo() methode des Comparable interfaces und wenn die ein 0 zurueckgibt, dann werden die objekte als gleich behandlet und im Set ersetzt.

Beim BigDecimal sind 2 BigDecimal's mit unterschiedlicher Skalierung nicht equal, aber ein compareTo gibt 0 zureuck. Steht glaub ich auch so in der JavaDoc, dass das eine (haessliche) Abweichung von der Konvention ist. Eigentlich fordert Comparable, dass compareTo() nur dann ein 0 zurueckgibt, wenn die Objekte auch equal sind.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben