Vorlesung Informatik 1 - Teil A: Java Kurs

2.11 Listen und eine erste Schleife

Bisher haben wir immer nur einzelne Objekte in einer Variable speichern und bearbeiten können. 

Um viele Objekte zu verwalten, speichert man sie in einer Liste. Java stellt mehrere Listen-Klassen zur Verfügung (Collections). Wir verwenden die  Klasse LinkedList. Sie verwaltet beliebig viele Objekte gleichen Typs.

Bei der Definition gibt man an, was für Objekte man in der Liste speichern will:

      LinkedList<JPanel> liste = new LinkedList<JPanel>();

In liste können wir jetzt Objekte speichern:
      liste.add(new JPanel());
      liste.add(new JPanel());
      liste.add(new JPanel());
               u.s.w.

Der eigentliche Vorteil ensteht, wenn wir eine Schleife über alle Elemente der Liste machen, im Zusammenhang mit Listen bietet sich die vereinfachte for-Schleife an:
    
    for(JPanel panel: liste) {
          panel.setBackground(Color.RED);
    }

Diese for-Anweisung g
eht nacheinander durch alle Elemente der Liste, dabei enthält panel die  Referenz auf das aktuelle Element.

Ein weiterer großer Vorteil ergibt sich im Zusammenhang mit Zuweisungskompatibilität. Nehmen wir an wir haben die Basisklasse Musikinstrument aus dem letzten Kapitel und davon abgeleitet Geige, Bratsche und Cello. Eine Klasse für Ein Orchester könnte jetzt so aussehen:

      class Orchester{
            LinkedList<Musikinstrument> musiker = new LinkedList<Musikisntrument>();
             public Orchester(){
                     musiker.add( new Geige() );
                     musiker.add( new Cello() );
                     musiker.add( new Bratsche() );
                     musiker.add( new Kontrabass() );
                     musiker.add( new Geige() );

                                  ...
             }
             public void spielt(){
                      for(Musikinstrument m:musiker)  m.spielt();
             }

Da jede von Musikinstrument abgeleitete Klasse die Methode spielt haben muss, kann nichts schiefgehen.

Wir werden dieses Prinzip in unseren Spielen anwenden:
     LinkedList<SpielFigur> figuren = new LinkedList<SpielFigur>();
           ...
     public void zeichneSpielstand(Graphics2D g){
               for(SpielFigur f:figuren) f.zeichne(g);
     }

So können wir beliebig viele Spielfiguren verwalten. 

Weiterführende Links

Lehrvideo  (YouTube)