# Zwei ArrayList(s) vergleichen



## Vril (20. Mrz 2008)

Hallo,
habe folgendes Problem, ich möchte zwei ArrayList(s) vergleichen, sprich prüfen ob EINE übereinstimmung in den beiden vorhanden ist. Wenn ich es so mache funktioniert es:

```
if(myArrayList1.contains("Flugzeug"){}
if(myArrayList2.contains("Flugzeug"){}
```
Aber das mit dem "Flugzeug" weis ich nicht, also ich möchte beide Listen direkt miteinander vergleichen und sehen ob ein Eintrag in beiden gleich ist. Weis zufällig jemand wie man das macht?


----------



## JavaFred (20. Mrz 2008)

Schnittmenge bilden:


```
ArrayList<String> temp = new ArrayList<String>(myArrayList1);
temp.retainAll(myArrayList2);
if (temp.isEmpty())
{
    // keine Übereinstimmung
}
else
{
    // mindestens 1 Begriff in beiden Listen
}
```


----------



## SlaterB (20. Mrz 2008)

performanter ist ein HashSet, erst eine Liste einfügen,
dann die Elemente der anderen einzeln und den boolean-Rückgabewert von jedem add prüfen


----------



## JavaFred (20. Mrz 2008)

SlaterB hat gesagt.:
			
		

> performanter ist ein HashSet, erst eine Liste einfügen,
> dann die Elemente der anderen einzeln und den boolean-Rückgabewert von jedem add prüfen


Dann bekommste aber auch true raus, wenn in der zweiten Liste ein Element doppelt enthalten ist.


----------



## SlaterB (20. Mrz 2008)

so ist das Leben, gewisse Voraussetzungen muss man schon einhalten,
Doppelte in Listen können zu viel schlimmeren Katastrophen führen

wenn wir schon dabei sind, bei deinem kommt in jedem Fall true raus, wenn in Liste 1 mehr Elemente sind als in Liste 2 
das ist nämlich nicht die Schnittmenge A ^ B sondern A \ B


----------



## JavaFred (20. Mrz 2008)

Hä?


```
ArrayList<String> x = new ArrayList<String>();
x.add("a");
x.add("b");
x.add("c");

ArrayList<String> y = new ArrayList<String>();
y.add("c");
y.add("d");
y.add("e");

ArrayList<String> z = new ArrayList<String>(x);
z.retainAll(y);
System.out.println(z);
```

Ausgabe ist [c]. Wenn das nicht die Schnittmenge ist, was dann?


----------



## SlaterB (20. Mrz 2008)

stimmt, mein Fehler, removeAll kenne ich eher als retainAll


----------

