Collection - contains-Methode überschreiben (anonyme innere Klasse)

Diskutiere Collection - contains-Methode überschreiben (anonyme innere Klasse) im Allgemeine Java-Themen Forum; Hallo liebe Community, hier mal wieder ein kleines Problem ;) Ich möchte bei einer ArrayList mit selbst definierten Objekten mit contains...

  1. iTobi97
    iTobi97 Mitglied
    Hallo liebe Community,
    hier mal wieder ein kleines Problem ;)
    Ich möchte bei einer ArrayList mit selbst definierten Objekten mit contains überprüfen, ob die Objekte in der Collection sind.

    Für diesen Zweck könnte man ja normalerweise die contains-Methode verwenden und das Objekt übergeben, von dem ich wissen möchte, ob sich dieses in der Collection befindet.
    Ich möchte allerdings in einem Unit-Test hardgecodete Objekte mit in einer Methode (algorithmisch) erzeugte Objekte in zwei Collections miteinander vergleichen. Und da funktioniert die contains-Methode nicht mehr, da es ja nicht mehr wirklich die "selben" Objekte sind, sondern mit dem selben Zustand erzeugt werden (Contains-Überprüfung funktioniert ja glaube ich mittels Hashwerten). Das alleinige Überschreiben der equals-Methode der Objekte hat leider nicht geholfen.

    Meine Frage wäre, ob ich auf irgendeine Weise die contains-Methode einer Array-List überschreiben kann (z.B. mit einer anonymen inneren Klasse) um herauszufinden, ob die Objekte aus der einen Collection sich auch in der anderen Collection befinden (nicht zwingend in der selben Reihenfolge).

    Vielen Dank schon einmal im Voraus
    VG Tobias
     
  2. Vielleicht hilft dir dieser Kurs hier weiter.
  3. Flown
    Flown Administrator Mitarbeiter
    Also Implementierung von contains in ArrayList ist:
    Code (Java):
        public boolean contains(Object o) {
            return indexOf(o) >= 0;
        }

        public int indexOf(Object o) {
            if (o == null) {
                for (int i = 0; i < size; i++)
                    if (elementData[i]==null)
                        return i;
            } else {
                for (int i = 0; i < size; i++)
                    if (o.equals(elementData[i]))
                        return i;
            }
            return -1;
        }
    Also ist deine equals Methode falsch implementiert!
     
  4. Barista
    Barista Mitglied
    Wenn die Reihenfolge keine Rolle spielt, solltest Du die Objekte/Elemente aus der ArrayList in ein Set stecken.

    Das geht ganz einfach mit dem Konstruktor von HashSet bzw. TreeSet.

    Bei der Verwendung von HashSet muss neben der equals-Methode auch die hashCode-Methode korrekt implementiert sein.

    Bei der Verwendung von TreeSet muss neben der equals-Methode auch die compareTo-Methode korrekt implementiert sein, die Ojekte müssen das Interface Comparable implementieren.
     
  5. iTobi97
    iTobi97 Mitglied
    @Barista Sorry, mit der Reihenfolge hatte ich gemeint, dass bei der contains-Methode die Reihenfolge der Elemente in der Liste keine Rolle spielen soll. Die Reihenfolge innerhalb des Arrays ist dagegen essentiell.

    Auf den Punkt mit der hashCode-Methode bin ich auch schon gestoßen, allerdings habe ich die ehrlich gesagt noch nie überschrieben und weiß nicht wofür die überhaupt verwendet wird.

    Müssen alle Objekte von der Liste wirklich Comparable implementieren? Oder reicht es, die Hash-Methode zu überschreiben? Und an welcher Stelle überschreibe ich hash-Code? Wird das eventuell in einer anonymen inneren Klasse, die von ArrayList erbt gemacht?
     
  6. Harry Kane
    Harry Kane Bekanntes Mitglied
    Das überschreiben von hashCode, equals und compareTo passiert in den Klassen, die du in die ArrayList (oder TreeSet oder was auch immer) legen möchtest, also bei den
    wobei ich davon ausgehe, dass "selbst definierte Objekte" Instanzen von einer selbst geschrieben Klasse sind.
    Wenn du wie oben gezeigt, deine Objekte in eine ArrayList packst, musst du nur equals() überschreiben.
     
  7. Wenn du Java lernen möchtest, empfehlen wir dir diesen Kurs hier
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

Collection - contains-Methode überschreiben (anonyme innere Klasse) - Ähnliche Themen

@OneToMany @JoinTable failed to lazily initialize a collection Fehler
@OneToMany @JoinTable failed to lazily initialize a collection Fehler im Forum Datenbankprogrammierung
Geeignete Collection/Liste/Datenbank
Geeignete Collection/Liste/Datenbank im Forum Java Basics - Anfänger-Themen
Code Collection
Code Collection im Forum Codeschnipsel u. Projekte
List nicht als Collection an erkannt.
List nicht als Collection an erkannt. im Forum Java Basics - Anfänger-Themen
Collection Aufgabe mit LinkedList
Collection Aufgabe mit LinkedList im Forum Java Basics - Anfänger-Themen
Thema: Collection - contains-Methode überschreiben (anonyme innere Klasse)

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. annonyme klasse accept methode java überschreiben