Warum eine dynamische Reihung?
Eine statische Reihung wird mit fester Länge erzeugt. Bei einer Anmeldeliste, einer Playlist oder einem Warenkorb weiß man aber vorher nicht, wie viele Einträge kommen.
- Statische Reihung:Länge beim Erzeugen fest, z. B.
new String[5]— ist sie voll, passt nichts mehr hinein. - Einfügen dort:Platz in der Mitte schafft man nur, indem man selbst alle folgenden Werte verschiebt.
- Dynamische Reihung:Klasse
DynArray— jede Operation lässt die Reihung wachsen oder schrumpfen. - Index:Die Elemente stehen lückenlos an den Positionen \(0,\,1,\,\dots,\,n-1\); dabei ist \(n\) die aktuelle Länge.
Die Operationen der dynamischen Reihung
Im Abitur sind genau diese Operationen vorgegeben. Mehr braucht man nicht — alles Weitere baut man daraus.
- Inhaltstyp:steht in spitzen Klammern:
DynArray<String>speichert Texte,DynArray<Integer>ganze Zahlen. DynArray()erzeugt eine leere dynamische Reihung.append(x)hängt x hinten an.insertAt(i, x)fügt x an Index i ein — das bisherige Element dort und alle folgenden rücken nach hinten.setItem(i, x)ersetzt den Inhalt an Index i durch x — die Länge bleibt gleich.delete(i)entfernt das Element an Index i — alle folgenden rücken nach vorn.getItem(i)liefert den Inhalt an Index i, ohne etwas zu ändern.getLength()liefert die Anzahl der Elemente.isEmpty()lieferttrue, wenn die Reihung leer ist.
DynArray<String> warteliste = new DynArray<String>();
warteliste.append("Ali"); // [Ali]
warteliste.append("Ben"); // [Ali, Ben]
warteliste.insertAt(0, "Cem"); // [Cem, Ali, Ben]
warteliste.delete(1); // [Cem, Ben]
String erster = warteliste.getItem(0); // "Cem"
Wähle oben ein Ziel und baue die Zielreihung mit den Operationen nach. Den Index wählst du durch Klick auf ein Feld oder mit dem Regler. Achte darauf, was mit den Indizes der anderen Elemente passiert.
getLength() = 0
Halte fest: Beim Einfügen und Löschen rücken alle folgenden Elemente um eine Stelle — ihre Indizes ändern sich. setItem ersetzt dagegen nur und verschiebt nichts.
Gültige Indizes: \(0 \le i \le \texttt{getLength()}-1\)
Allgemeine Hinweise
Das letzte Element
Es steht an Index getLength() - 1, nicht an getLength(). Ein Zugriff außerhalb von 0 bis getLength() - 1 führt zu einem Laufzeitfehler.
Indizes wandern
Nach insertAt oder delete steht an einem Index plötzlich ein anderes Element. Wer sich einen Index gemerkt hat, muss ihn anpassen.
Ersetzen oder einfügen?
setItem überschreibt — die Länge bleibt. insertAt schiebt ein — die Länge wächst um 1. Im Zweifel die Reihung vorher und nachher aufschreiben.
