# Iterieren über ArrayList



## lidija_25 (4. Jun 2015)

Hallo,

ich bin eine Java-Einsteigerin und neu im Forum  Ich bin hänge gerade an der Einheit Iterator/Iterable. Vielleicht kann mir ja jemand weiterhelfen, da ich befürchte ein ziemliches Verständnisproblem zu haben. Ich habe zwei Klassen (Sammlung und SammlungUI) 


```
import java.util.ArrayList;
import java.util.Iterator;

public class Sammlung 
{
   
    Object element;
    public ArrayList sammlungen=new ArrayList();
 
  
 public Sammlung(String name, int alter)
 {
     this.sammlungen.add(name);
     this.sammlungen.add(alter);
     
 }
    
 public Object nextSammlung()
   {
       Iterator itr=sammlungen.iterator();
       while(itr.hasNext())
       {
          element=itr.next();
          
       }
        return element;
   }

 
}

import java.util.*;

public class SammlungUI
{
   public static void main(String args[])
   {
       String einelement;
       Sammlung einesammlung=new Sammlung("Erste",23);
       Sammlung zweitesammlung=new Sammlung("Zweite",45);
       Sammlung drittesammlung=new Sammlung("Dritte",57);
       
       //System.out.println(einesammlung.nextSammlung());
     [COLOR=#ff0000]  for(Object o:einesammlung)  [/COLOR]
       {
           einelement=(String)o;
           System.out.println("Element" +  einelement); 
       }
       
   }
   
   
   
}
```

Das Problem, das ich habe ist, wenn ich über ein ArrayList objekt (einesammlung) iterieren will, bekomme ich jedes Mal die Meldung "for-each not applicable to expression type required:array or java.lang.iterable; found:Sammlung".

Mir ist nicht klar, warum es hier nicht möglich ist über das Sammlungs-Objekt zu iterieren? Hat vielleicht jemand eine Idee? Ich wäre euch sehr dankbar!

LG,
Lidija


----------



## InfectedBytes (4. Jun 2015)

Dein Objekt einesammlung ist ja auch keine Arrayliste, sondern vom typ Sammlung. 
Entweder muss du über die Arrayliste deiner Sammlung iterieren oder deine Klasse Sammlung muss iterable implementieren.

```
for(Object o : einesammlung.sammlungen) {
...
}
```
p.s. Sichtbarkeit public ist auch nicht ganz so ideal.

oder eben sowas:

```
public class Sammlung implements Iterable {
...
public Iterator iterator() {
  return sammlungen.iterator();
}
}
```

Die Arrayliste (und auch iterable/iterator) sind allesamt generisch, daher solltest du den generischen Typparameter auch mit angeben:

```
ArrayList<TypXYZ> sammlungen = new ArrayList<TypXYZ>();
```


----------

