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

iTobi97

Aktives 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
 

Flown

Administrator
Mitarbeiter
Also Implementierung von contains in ArrayList ist:
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!
 

Barista

Top Contributor
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.
 

iTobi97

Aktives 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?
 

Harry Kane

Top Contributor
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
selbst definierten Objekten
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Collection.contains()/retainAll() mit Referenzgleichheit statt equals()? Allgemeine Java-Themen 2
Rakshan Generic reading of XML document from the root tag into an Collection Allgemeine Java-Themen 0
JavaJüngling beliebige Collection die Comperable Elemente enthält als Parameter Allgemeine Java-Themen 37
W Collections Suche Collection, um Strings mit Indizees versehen Allgemeine Java-Themen 47
Y String-Collection: längste gemeinsame Strings / Prefixe Allgemeine Java-Themen 3
S Probleme mit Collection Allgemeine Java-Themen 7
S Passende Java Collection Allgemeine Java-Themen 5
D Eigene/r Collection/Container Allgemeine Java-Themen 3
K Collections Collection<> mit List<String> abgleichen? Allgemeine Java-Themen 10
D Beste Collection für Integer Allgemeine Java-Themen 4
H JPA (EclipseLink) Neuer Eintrag in Collection speichern (unidirektional) Allgemeine Java-Themen 3
M Collections Typ Variable einer generischen Collection ? Allgemeine Java-Themen 4
T Garbage Collection Frage Allgemeine Java-Themen 15
H Datentypen Collection für SQL-Datentypen Allgemeine Java-Themen 2
M collection persistence system Allgemeine Java-Themen 4
K associate collection with two open sessions Allgemeine Java-Themen 12
B Garbage Collection Logfile: Binary File Allgemeine Java-Themen 2
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
S Stilfrage bezüglich Beans mit Collection-Properties Allgemeine Java-Themen 2
B iText Portable Collection Acrobat X Allgemeine Java-Themen 2
S Eine Collection von Objekten mit LDAP Syntax filtern Allgemeine Java-Themen 5
Rudolf Aus Collection<Integer> eine Zahl machen Allgemeine Java-Themen 2
R Dateigestützte Collection für große Datenmengen Allgemeine Java-Themen 5
hdi Garbage Collection Allgemeine Java-Themen 12
P Collection Tree Allgemeine Java-Themen 19
C Die schnellste Collection-Klasse ? Allgemeine Java-Themen 37
W return Collection mit schleife durchsuchen Allgemeine Java-Themen 10
E Collection Problem Allgemeine Java-Themen 2
B Geordnete, begrenzte Collection Allgemeine Java-Themen 3
D [SOLVED] Collection wird nicht richtig per Konstruktor übernommen Allgemeine Java-Themen 8
S Wahl der Collection, unspezifizierte Elementtypen Allgemeine Java-Themen 4
D Map mit Collection Eigenschaften Allgemeine Java-Themen 9
T Objekt der Garbage Collection zugaenglich machen? Allgemeine Java-Themen 7
S Innerer Type einer generischen Collection herausfinden? Allgemeine Java-Themen 13
B SBCC - Swing Better Components Collection - downloadlink ? Allgemeine Java-Themen 5
G Schnelligkeit einer Collection Allgemeine Java-Themen 12
V Collection in Collection Allgemeine Java-Themen 3
W [solved] Vector sortieren (Collection / Comparable?) Allgemeine Java-Themen 7
M Collection aufteilen Allgemeine Java-Themen 4
S Collection Type Allgemeine Java-Themen 8
S Probleme mit collection.containsAll Allgemeine Java-Themen 28
F Frage zu Memory Leak, Garbage Collection und Profiler-Tools Allgemeine Java-Themen 6
C Collection Multithreading? Allgemeine Java-Themen 33
vogella Überschreiben von equals und hashcode für Collection Allgemeine Java-Themen 7
T Hibernate Criteria Queries - Abfragen von Collection-Members Allgemeine Java-Themen 2
M Schnellste Collection/Liste Allgemeine Java-Themen 15
M Collection mit ArrayList Allgemeine Java-Themen 17
F mittels Collection<A> an A.class kommen? Allgemeine Java-Themen 7
L Welche Collection ist die richtige ? Listen mergen Allgemeine Java-Themen 3
B Collection Allgemeine Java-Themen 2
M Wie lange dauert ein garbage collection Allgemeine Java-Themen 7
R Garbage Collection bei gegenseitiger Objektreferenz Allgemeine Java-Themen 2
N Collection#retainAll(Collection<?> c) Allgemeine Java-Themen 3
M garbage collection Allgemeine Java-Themen 14
G Frage zur Garbage Collection Allgemeine Java-Themen 5
R Objekttyp ermitteln das aus generischer Collection kommt Allgemeine Java-Themen 3
J Von Collection zu vector Allgemeine Java-Themen 5
P Welche Collection verwenden? Allgemeine Java-Themen 4
S Sortierung einer Collection nach dem Attribut "name&quo Allgemeine Java-Themen 3
C Collection Element ersetzen Allgemeine Java-Themen 5
C public boolean containsAll(Collection c) Allgemeine Java-Themen 2
C Collection, LinkedList, Elemente Allgemeine Java-Themen 4
G Override String.contains Allgemeine Java-Themen 2
T Collections TreeSet.contains ruft nicht .equals? Allgemeine Java-Themen 4
H ArrayList.contains() Allgemeine Java-Themen 2
C Komisches Verhalten zwischen Set und List bei contains Allgemeine Java-Themen 6
B Arraylist.contains(Klasse) möglich? Allgemeine Java-Themen 19
1 String mit contains vergleichen (ignore case) Allgemeine Java-Themen 2
T Set.contains() auch false wenn value == null? Allgemeine Java-Themen 4
J Array[][] contains Array[][] ? Allgemeine Java-Themen 4
G drawPolygon() vs. contains() -> komisch! Allgemeine Java-Themen 14
I Properties.contains("Hell*orld"); Allgemeine Java-Themen 14
N contains(.) liefert nicht erwartetes Ergebnis Allgemeine Java-Themen 3
B String.contains() --- Java1.3 Allgemeine Java-Themen 2
W Hilfe bei Methode Allgemeine Java-Themen 14
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
Simon16 compareTo Methode überschreiben Allgemeine Java-Themen 4
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
M CrudRepository save Methode mocken Allgemeine Java-Themen 6
thor_norsk toString() - Methode Allgemeine Java-Themen 6
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
Encera Zweite Main-Methode zuschalten Allgemeine Java-Themen 18
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
E Methoden abstract static Methode Allgemeine Java-Themen 8
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
T C++ Methode Übersetzung in Java Allgemeine Java-Themen 3
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
R @author vor Methode (eclipse) Allgemeine Java-Themen 1
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
Y Java Bruttoberechnen + runden Methode Allgemeine Java-Themen 1
R Warum ist die Methode unendlich oft rekursiv? Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben