Was versteht man unter einem dynamischen Array? Was versteht man unter einer dynamischen Datenstruktur?

Dynamische Arrays sind Arrays, die ihre Größe zur Laufzeit an den Bedarf anpassen können.

In Java gibt es keine dynamischen Arrays. Die Länge eines Arrays wird bei seiner Erzeugung festgelegt. Es besteht allerdings die Möglichkeit das Verhalten eines dynamischen Arrays nachzubilden, indem man bei Bedarf ein neues größeres Array anlegt und die Daten des alten Arrays in das neue Array kopiert. Mehr dazu findest du im Artikel “Wie erweitert man ein Array?” in unserer FAQ.

Oft ist es geschickter, die Klasse java.util.ArrayList zu verwenden, wenn man das Verhalten eines dynamischen Arrays benötigt.

Im Unterschied zu nicht dynamischen Datenstrukturen wie beispielsweise Arrays in Java, können dynamische Datenstrukturen mit ihrem Bedarf wachsen. Beispiele für dynamische Datenstrukturen in Java sind List, Set, Map, Stack oder der StringBuilder.

Ein Stack als dynamische Datenstruktur kann in Java als vekettete Liste wie folgt implementiert werden:

public class Stack<T> {

    private class Node<T1> {
        T1 data;
        Node<T1> next;
    }

    private Node<T> head = null;

    public void push(T elem) {
        Node<T> temp = head;
        head = new Node<T>();
        head.data = elem;
        head.next = temp;
    }

    public T pop() {
        T temp = head.data;
        head = head.next;
        return temp;
    }

    public boolean isEmpty() {
        return head == null;
    }

    public static void main(String[] args) {
        Stack<String> st = new Stack<>();
        st.push("Anton");
        st.push("Berta");
        st.push("Caesar");

        while (!st.isEmpty()) {
            System.out.println(st.pop()); // Ausgabe: Caesar, Berta, Anton
        }
    }
}

Zur Implementierung der push-Methode wird die Referenz temp auf den zuletzt eingefügten Knoten gesetzt (Zeile 11). Somit ist sicher gestellt, dass ein neuer Knoten als head eingefügt werden kann (Zeile 12). Die Referenz des neuen Knoten (head.next) wird auf sein Nachfolgeelement temp gesetzt (Zeile 14). Dieser Ablauf ist in der Abbildung Stack push dargestellt.

Stack push

Zur Implementierung der pop-Methode wird der zuletzt eingefügte Wert auf die Variable temp gesichert (Zeile 18). Damit sind die Voraussetzungen geschaffen, dass die Referenz head auf den in Abbildung Stack pop als C bezeichneten Knoten gesetzt werden kann (Zeile 19). Der Wert von temp wird zurückgegeben (Zeile 20).

Stack pop