Komisches Verhalten zwischen Set und List bei contains

cr4ch

Mitglied
Moin

Also ich bekam dauernd eine NullPointer Exception und hab mich auf die Suche nach dem Problem gemacht. Zum Speichern von Elementen verwende ich ein SortedSet, das in Verbindung mit contains nicht gerade das liefert, was ich möchte.
Kurz zur Logik:
Ich rufe eine Methode mit einem Element auf. Die Prüft ob das Element schon im Set vorhanden ist, wenn nicht wird was initialisiert. Grundlegend ist es eigentlich auch egal ... 🙂

Jedenfalls gibt mir contains aus, dass das Element schon im Set sei, was aber nicht simmt. Aus testzwecken habe ich jetzt einfach mal eine ArrayList genommen, alle Elemente aus dem Set in die List übertragen (list.addAll) und sieh an, plötzlich funktioniert contains (auf der List) korrekt?

Kann mir das einer erklären?

Ich habe auch die equals Methode überscheiben, wird aber interessanteweise nicht aufgerufen (zumindestens beim Set)

Gruß
 
Da TreeMap (oder was auch immer du verwendest) das ganze in einer Map speichert, musst du noch
Code:
hashCode
überschreiben. Dann sollte es klappen
 
Bei TreeMap braucht man zwar compareTo, und hashCode kann theoretisch sogar einfach als [c]return 0;[/c] implementiert sein, aber es gibt zweieinhalb Punkte, die man beachten sollte:
- equals sollte richtig überschrieben sein
- hashCode sollte so überschrieben sein, dass es mit equals konsistent ist (siehe Doku)
- bei einer TreeMap sollte compareTo so implementiert sein, dass es mit equals konsistent ist (siehe Doku)
 
Jo Peifendeckel
Musste dann doch die compareTo überschreiben (Hab festgestellt, dass mein "Vorgänger" das schon irgendwo gemacht hat, leider nicht so, wie es zu gebrauchen war)
Wenn compareTo 0 zurück gibt, wird das Objekt auch nicht in das Set hinzugefügt.

Thx
 

Neue Themen


Zurück
Oben