import java.util.Iterator; // Und wie geht das, dass da theoretisch unendlich viele // Daten in eine Datenstruktur passen? // Beispiel: Verkettete Liste // Node = (Inhalt, naechster Knoten) // wenn naechster Knoten null Ende der Liste erreicht // Und wir koennen die Elemente durchiterieren public class MyList implements Iterable { private class Node { E content; Node next; Node(E content, Node next) { this.content = content; this.next = next; } } private Node head; public MyList() { head = null; } public void add(E e) { head = new Node(e, head); } public E get(int i) { Node n = head; for(int j = 0; j < i; j++) { n = n.next; } return n.content; } public int size() { Node n = head; int length = 0; while(n != null) { n = n.next; length++; } return length; } // Von Iterable kommt diese Methode public Iterator iterator() { // Wenn man ein Objekt zurueck gibt braucht man keine Klasse, // man kann die Methoden auch direkt beim Konstruktor angeben. return new Iterator() { Node n = head; public boolean hasNext() { return n != null; } public E next() { E e = n.content; // Eines weiter n = n.next; return e; } public void remove() { // Diese Methode ist optional in dem Sinn, dass // man folgendes machen darf: throw new UnsupportedOperationException("Unterstuetzen wir nicht."); } }; } }