Du kannst dir im JDK die Klassenquellen ansehen, da wird gezeigt wie das funktioniert.
Paar Beispiele geb ich dir trotzdem:
ArrayList:
Im Grunde versteckt sich hinter dieser Klasse ein gewöhnliches Array, welches bei Bedarf vergrößert wird (größeres erzeugen und umkopieren; altes löschen).
Einen Stack kann man auch so implementieren.
Dann gibt es noch (doppelt) verkettete Listen. Dabei zeigt jedes Element jeweils auf seinen Nachfolger (bzw. Vorgänger im Fall der doppelten). Kann man sie wie aneinanderhängende Blöcke vorstellen.
Du brauchst diese Listen sehr oft. Zum Beispiel bei unbekannten Arraygrößen, also wenn du die Länge erst zur Laufzeit des Programms kennst. Das hat mit SQL auch erstmal garnichts zu tun, SQL soll ja Daten in eine Datenbank ablegen, also dauerhaft speichern. Die Listen speichern den Kram ja nur lokal im RAM.
Ein Beispiel wäre die Adresszeile im Browser. Der Webserver kann ja unmöglich vorher wissen, wie viele Argumente der Benutzer/die Webseite anhängt. Da braucht man dann dyn. Listen für.
Anderes Beispiel: Du möchest Zeilen aus einer SQL-Tabelle in einem Objekt speichern. Das kann man mit einer dynamischen Liste mit entsprechendem Klassentemplate machen. Hier könnte man allerdings auch vorher ein SELECT COUNT(*) FROM blubb machen und mit dieser Angabe ein Array erzeugen, aber naja. Schön wäre das net
Ich hoffe, ich konnte dir helfen.