Zwei Listen vergleichen?

Spaceman85

Mitglied
Hallo Leute,

ich habe folgendes Problem. Möchte zwei Listen vom Typ ArrayList<String> vergleichen.
In Java sind wohl Listen nur dann gleich wenn sie nicht nur exakt die selben Elemente enthalten sondern auch die Reihenfolge der Elemnet übereinstimmt.

Gibt es eine einfache Methode um Gleichheit zu erhalten auch wenn die Reihenfolge ungleich ist?
Mir fällt nur ein, jedes Objekt einzeln zu vergleichen, aber da muss es doch noch etwas anderes geben oder?

Danke
Spaceman
 
Hallo,

kannst du nicht die Listen erst sortieren lassen - über "Collections.sort()" - und dann miteinander vergleichen?

Gruß,
Wolf
 
Hi,

du kannst die ArrayList zuerst zu einem HashSet konvertieren und dann vergleichen:

Java:
ArrayList<String> a1 = new ArrayList();
ArrayList<String> a2 = new ArrayList();

a1.add("elem1");
a1.add("elem2");

a2.add("elem2");
a2.add("elem1");

// Gibt FALSE aus
System.out.println( a1.equals(a2) );

HashSet hs1 = new HashSet(a1);
HashSet hs2 = new HashSet(a2);

// Gibt TRUE aus
System.out.println( hs1.equals(hs2) );

Intern wird bei HashSet.equals (geerbt von AbstractCollection) die containsAll() Methode aufgerufen:
This implementation iterates over the specified collection, checking each element returned by the iterator in turn to see if it's contained in this collection. If all elements are so contained true is returned, otherwise false.
 
Habe nun folgendes erfolgreich ausprobiert.

Code:
list1.containsAll(list2) && list2.containsAll(list1) && list2.size() = list2.size()

Danke für eure Hilfe!
 
Wobei du dir das zweite containsAll() eigentlich sparen könntest:
Java:
if (list1.containsAll(list2) && (list1.size() == list2.size())) {
}
 
Hi,

zwecks Performance würde ich zuerst die Überprüfung auf size() machen, und dann das containsAll().

Wenn die Größe ungleich ist, dann wird das containsAll() nicht mehr aufgerufen, was zur Laufzeit je nach Größe der Liste einen Geschwindigkeits-Vorteil bringt.

Grüße,
BK
 

Neue Beiträge

Zurück