Home > Informatik > Stufe Q1 > Referenzen > dynamische List

15.42 Quelltext-Analyse, Teil 5

append()

Die manipulierende Methode append erzeugt ein neues Listen-Element und fügt dieses neue Element hinten an die vorhandene Liste an. Das neue Element wird dadurch aber nicht zum aktuellen Element, dafür sind andere manipulierende Methoden wie toFirst, toLast oder next zuständig.

    /**
     * Ein neues Objekt pObject wird am Ende der Liste eingefügt. Das aktuelle
     * Objekt bleibt unverändert. Wenn die Liste leer ist, wird das Objekt
     * pObject in die Liste eingefügt und es gibt weiterhin kein aktuelles Objekt
     * (hasAccess() == false). Falls pObject gleich null ist, bleibt die Liste
     * unverändert.
     */
    public void append(Object x)
    {
       if (x != null)
       {
          Knoten neu = new Knoten(x,null);
          
          if (isEmpty())
          {
             first = last = neu;
          }
          else
          {
             last.nachfolger = neu;
             last = neu;
          }
       }
    }

Zunächst wird überprüft, ob das neue Objekt überhaupt existiert. Wenn die Bedingung x != null nicht erfüllt ist, scheint das ja der Fall zu sein.

Als erstes wird ein neues Knoten-Objekt angelegt:

Knoten neu = new Knoten(x,null);

Dem Konstruktor von Knoten wird das Objekt x als Parameter übergeben, und als Nachfolger wird null gesetzt, weil ja ein neues letztes Element erzeugt wird, und das letzte Element hat keinen Nachfolger.

Falls nun der Fall eintritt, dass die Liste noch leer ist, dann werden die beiden Zeiger first und last auf dieses neu erzeugte Element gesetzt, das dann ja das erste und einzige Element der Liste ist.

Ist die Liste nicht leer, besteht also aus mindestens einem Element, so muss das neue Element hinter das bisherige letzte Element gesetzt werden. Dies geschieht mit der einfachen Anweisung

last.nachfolger = neu;

Der Knoten neu wurde ja bereits erzeugt, also kann der nachfolger-Zeiger des bisherigen letzten Knotens auf den neuen Knoten gesetzt werden.

Jetzt darf man nicht vergessen, auch den last-Zeiger zu aktualisieren. Er muss ja jetzt auf den neuen Knoten zeigen, daher:

last = neu;
Testprogramm

Hier noch ein kleines Testprogramm, das neben append weitere Methoden der Klasse List testet:

public class Test
{
    List l;

    public Test()
    {
       l = new List();
       l.append(new Bruch(1,1)); l.append(new Bruch(1,2));
       l.append(new Bruch(1,3)); l.append(new Bruch(1,4));       
       l.append(new Bruch(1,5)); l.append(new Bruch(1,6));       
       l.toFirst();
       l.setContent(new Bruch(3,1));
       l.next();
       l.setContent(new Bruch(3,2));
       l.toLast();
       l.setContent(new Bruch(3,6));
       l.append(new Bruch(1,7));
       l.show();
    }
}

Und hier die Konsolen-Ausgabe dieses Testprogramms:

3/1  <=== first
3/2
1/3
1/4
1/5
3/6  <=== act
1/7  <=== last