Eine Liste, die sich selbst in der Größe anpasst
Ein einfaches Java-Array hat eine feste Länge: Entscheidest du dich für zehn Plätze, hast du für immer zehn Plätze. ArrayList ist die größenveränderliche Alternative aus java.util - sie wächst, wenn du etwas hinzufügst, und schrumpft, wenn du etwas entfernst, und sie bringt praktische Methoden für das mit, was man tatsächlich mit einer Liste tut.
Beachte den Typ in spitzen Klammern - List<String> - der dem Compiler mitteilt, dass diese Liste String-Werte enthält. Das <> (der „Diamond") auf der rechten Seite lässt Java denselben Typ ableiten, ohne ihn zu wiederholen. Und beachte, dass du java.util.ArrayList importierst; sie ist nicht standardmäßig verfügbar.
Als List deklarieren, als ArrayList konstruieren
Fast immer wirst du die Variable über die Schnittstelle List statt über die konkrete ArrayList deklariert sehen:
List<String> names = new ArrayList<>();
Das ist eine gute Gewohnheit, keine Regel. Gegen die Schnittstelle List zu programmieren bedeutet, dass dem Rest deines Codes egal ist, welche Listenimplementierung du verwendet hast, sodass du sie später durch eine andere ersetzen kannst, ohne ihn anzufassen. Im Alltag verhalten sich beide gleich.
Hinzufügen, Lesen und Ändern
add(value)hängt ans Ende an.add(index, value)fügt an einer Position ein und verschiebt spätere Elemente nach rechts.get(index)liest das Element an einer Position (nullbasiert).set(index, value)überschreibt ein vorhandenes Element.
Indizes sind nullbasiert, und get auf einen Index außerhalb des gültigen Bereichs wirft IndexOutOfBoundsException.
Elemente entfernen
Es gibt eine klassische Falle, wenn die Liste Integer enthält. remove(int) bedeutet „nach Index entfernen" und remove(Object) bedeutet „nach Wert entfernen", also:
List<Integer> nums = new ArrayList<>(List.of(10, 20, 30));
nums.remove(1); // entfernt Index 1 -> den Wert 20
nums.remove(Integer.valueOf(20)); // entfernt den Wert 20
Verpacke den Wert in Integer.valueOf(...), wenn du „entferne diesen Wert" meinst und nicht „entferne diesen Index".
Größe, contains und Index-Suchen
List.of(...) erzeugt schnell eine unveränderliche Liste; übergibst du sie dem ArrayList-Konstruktor, erhältst du eine veränderbare Kopie, die mit diesen Werten gefüllt ist.
Eine ArrayList durchlaufen
Die sauberste Schleife ist das erweiterte for (das „for-each"):
Wenn du auch den Index brauchst, nutze eine gezählte Schleife mit size() und get(i):
Eine Regel: Füge einer Liste keine Elemente hinzu und entferne keine, während eine for-each-Schleife sie durchläuft - das wirft ConcurrentModificationException. Um passende Einträge sicher zu löschen, nutze removeIf:
Sortieren
Collections.sort ordnet eine Liste an Ort und Stelle nach der natürlichen Ordnung (alphabetisch bei Strings, numerisch bei Zahlen):
Für eigene Sortierungen übergibst du list.sort(...) einen Comparator - zum Beispiel names.sort(Comparator.comparingInt(String::length)), um nach Länge zu sortieren.
ArrayList enthält Objekte, keine primitiven Typen
Du kannst nicht ArrayList<int> schreiben. Generics funktionieren nur mit Objekttypen, nutze daher die Wrapper-Klasse Integer, Double, Boolean und so weiter:
Javas Autoboxing wandelt für dich zwischen int und Integer um, sodass sich das natürlich liest - denke nur daran, dass die Liste selbst Integer-Objekte speichert.
Weiter: HashMap
ArrayList ist das richtige Werkzeug, wenn dir Reihenfolge und Position wichtig sind. Wenn du Dinge über einen Schlüssel nachschlagen musst - einen Benutzernamen zu einem Benutzer, einen Produktcode zu einem Preis - willst du eine HashMap, die auf der nächsten Seite kommt.
Häufig gestellte Fragen
Wie erstellt man eine ArrayList in Java?
Deklariere sie mit dem Elementtyp in spitzen Klammern und rufe den Konstruktor auf: ArrayList<String> names = new ArrayList<>();. Das <> auf der rechten Seite (der Diamond-Operator) lässt Java den Typ ableiten. Üblicherweise deklarierst du die Variable über die Schnittstelle List: List<String> names = new ArrayList<>();.
Was ist der Unterschied zwischen einem Array und einer ArrayList in Java?
Ein einfaches Array hat eine feste Länge, die beim Erstellen festgelegt wird, und kann primitive Typen wie int aufnehmen. Eine ArrayList wächst und schrumpft automatisch, während du Elemente hinzufügst und entfernst, enthält nur Objekte (also wird int zu Integer) und bringt Methoden wie add, remove, contains und size mit. Nimm ein Array für primitive Daten fester Größe; nimm eine ArrayList, wenn sich die Größe ändert.
Wie entfernt man ein Element aus einer ArrayList?
Rufe remove(index) auf, um nach Position zu entfernen, oder remove(object), um das erste passende Element zu entfernen. Sei bei Integer-Listen vorsichtig: list.remove(2) entfernt den Index 2, während list.remove(Integer.valueOf(2)) den Wert 2 entfernt. Um während eines Durchlaufs zu entfernen, nutze das remove() eines Iterator oder removeIf(...), um eine ConcurrentModificationException zu vermeiden.