Verständnisfrage zu contains()

gamebreiti

Mitglied
Hallo Leute,

ich möchte überprüfen ob ein bestimmter Objekt(Datentyp) in einer Liste vorhanden ist.
Laut API liefert contains true, wenn ein Element e mindestens einmal in einer Liste vorhanden ist.

Beispiel:

ich habe mehrere Klasse verschiedener Autos (Audi, BMW, VW etc.)

in einer Liste sind nun verschiedene Fahrzeuge vom Typ Auto

ListeAutos ([0]Audi,[1]BMW,[2]VW)

nun habe ich eine Methode ceckAuto(Auto auto)

...
wollte nun

ListeAuto.contains(Audi); benutzen um festzustellen ob sich Audi in der Liste befinden.

Die Abfrage liefert aber immer false, obwohl sich ein Objekt des Typs Audi in der ListeAuto befindet.


Wie kann man das richtig prüfen?
 
Zuletzt bearbeitet:
contains liefert true zurück, wenn für mindestens ein Element in der Liste der Vergleich mit equals() true zurückgibt. Vermutlich hast du equals falsch (oder gar nicht gescheit) implementiert.
 
Da kannst natürlich auch einfach einen Zauberspruch aufsagen, die Augen schließen und ganz fest daran glauben, dass der Computer das Program, was du haben möchtest, selbst schreibst....

contains() funktioniert nunmal über den Vergleich mit equals. Wenn du equals dann nicht gescheit überschreibst, dann wird die Implementierung aus Object hergenommen, die aber in aller Regel nicht das gewünschte Resultat liefert. Hier bekommst du nämlich nur ein true, falls Identität vorliegt.
 
Zuletzt bearbeitet:
okay okay ... ich scheu mich ja nicht etwas tiefer in die Tasten zugreifen.

in Welcher Klasse muss ich equals jetzt überschreiben in den Objectklassen (das sind viele) oder in der Klasse in der ich die Überprüfung durchführe.
Und in wie fern hat das Einfluss auf meine bereits gemachten Vergleiche.

Habe bisher nur eigene Methoden und paint() überschrieben daher frag ich.
 
zu diesem Schluss kam ich auch. Doch muß ich ja in der überschriebenen equals() - Methode irgendwelche Attribute aus meinem Objekt mit dem == Operator auf Gleichheit überprüfen.

Und ich möchte ja nicht wissen ob das ausgewählte Objekt ein Auto ist, da sind nur Autos in der Liste ich möchte wissen ob in der Liste z.B. ein Audi enthalten ist.
Da müsste doch eigentlich der Schüssel -------instanceof----- schon reichen. Aber ebend in jeder Klasse da ich sie, wenn sie in der Mutterklasse ist, in der Subklasse eh überschreiben muss.

ODER???
 
Zuletzt bearbeitet:
was genau willst du jetzt eigentlich überprüfen?
  • ob die Liste irgendein Auto eines bestimmten Typs (z.B. Audi) enthält -> über Liste iterieren und
    • das Herstellerattribut vergleichen, oder:
    • mittels instanceof bzw. Class.isInstance prüfen (falls deine Autohersteller Untertypen von Auto sind)
  • ob die Liste ein ganz bestimmtes Auto-Objekt enthält -> equals+hashCode überschreiben + Collection.contains(auto)
 
Zuletzt bearbeitet:
@Agoton Sax
Vielen Dank für die Mühe.

Ersteres möchte ich überprüfen. Die Typenklassen sind Subklassen von Auto.
Als ich die equals()-Methode überschrieben habe, kam es zu Problemen da ich an anderer Stelle auch mit indexOf suche und auch indexOf laut API mit equals prüft.
Somit kam ich zu dem Schluss den du hier beschrieben hast:

!!!!!! mittels instanceof bzw. Class.isInstance prüfen (falls deine Autohersteller Untertypen von Auto sind) !!!!!!!!!!!!

so werde ich es machen denke ich

Nochmal vielen Dank

gamebreiti
 

Neue Themen


Zurück
Oben