# Frage zu ArrayList und Schnittmenge



## Veritus (3. Jan 2007)

Hi leute, ich bin grad hier auf dieses Forum gestoßen und muss das gleich mal ausnutzen und euch zwei Fragen stelle.

1: Wie bilde ich die Schnittmenge zweier Mengen. kann man hier den minus operator benutzen? also MengeA - MengeB.
Konkret bestehen meine Mengen aus einer Mengen von Tupeln. 


2: Wie speicher ich so ein Tupel in einer ArrayList ab. Also pro Listenelement ein Tupel. 
ich hab mal probiert das ich  List<int ,int> testlist = new ArrayList<int,int> 
aber anscheinend ist das falsch. 


Ich denke mal das die antworten wahrscheinlich ziemlich einfach sind, aber ich bin mit java überhaupt nicht so vertraut und deswegen wäre es echt super wenn ihr mir helfen könntet. 


Gruß, Veri


----------



## WieselAc (3. Jan 2007)

Zu 1)  Nein so einfach geht das nicht. Du musst schon "händisch" die Elemente auf Gleichheit überprüfen und dir so die Schnittmenge zusammen bauen.


Zu 2) Ich selber darf nicht mit java 5 arbeiten. Deshlab kenn ich mich mit den Templates nicht sonderlich gut aus, aber eine Liste ist nunmal eine Liste. Von daher kann an jede Stelle nur ein Objekt stehen. Das bedeutet, um eine Liste von Tupeln zu machen, musst du dir für jedes Tupel eine ArrayList anlegen und diese dann wieder in eine Arraylist stecken.


Das kann man sich so in etwas vorstellen:

list1 = 1, 2, 3, 4, 5
list2 = 3, 4, 2, 1, 3, 7, 9
list3 = 1, 2
...
listn = 9, 8, 7, 6, 5, 4, 3, 2, 1, 0


gesamtListe = list1, list2, list3, ..., listn


----------



## Beni (3. Jan 2007)

Wenn du ein "java.util.Set" verwendest, kannst du die Schnittmenge mit "Set#retainAll" bilden.


----------



## armitage (3. Jan 2007)

Hm. Listen sind aber mathematisch gesehen keine Mengen. Benutze Set::retainAll, um die Schnittmenge zweier Mengen zu bestimmen.


----------



## byte (3. Jan 2007)

zu 1: In Collection ist die Methode retainAll(Collection) definiert. Du kannst also recht einfach die Schnittmenge bilden:


```
Set set1 = ...;
Set set2 = ...;
set1.retain(set2);
```

zu 2: Du kannst keine primitiven Typen verwenden bei den Generics. Darüber hinaus haben Listen nur einen Parametertyp und nicht zwei oder mehrere. So funktionierts:


```
List<List<Integer>> tupels = new ArrayList<List<Integer>>();
List<Integer> tupel = new ArrayList<Integer>();
tupel.add(1);
tupel.add(17);
tupel.add(23);
tupels.add(tupel);
```


----------



## Veritus (3. Jan 2007)

wow, vielen dank für die schnelle Hilfe.

Ich werd die Sachen gleich mal ausprobieren.


Und nochmal danke


----------

