Dynamische Arrays in Java mit ArrayList
Lerne, wie du in Java die Klasse ArrayList benutzen kannst, um dynamische und potentiell "unendlich lange" Arrays zu verwenden.Worum geht´s?
- 1. Eine ArrayList in Java anlegen
- 2. Elemente in eine ArrayList hinzufügen und auslesen
- 3. Ein Element aus einer ArrayList auslesen
- 4. Die Länge bzw. Größe einer ArrayList herausfinden
- 5. Die Position eines Elements in der ArrayList herausfinden
- 6. Herausfinden, ob sich ein Element in einer ArrayList befindet
- 7. Elemente aus einer ArrayList entfernen
- 8. Eine Kopie einer ArrayList erstellen
- 9. Eine ArrayList sortieren lassen
In diesem Java Tutorial lernen wir die Klasse ArrayList kennen und nutzen. Sie ist immer dort hilfreich, wenn wir dynamische Listen benötigen, also Listen, bei denen wir vor dem Start des Programms nicht wissen, wie groß sie werden können. Anstatt also für diese Fälle einen übergroßen Array zu definieren (mit entsprechendem Speicherplatz-Verbrauch), überlassen wir das der Klasse ArrayList.
1. Eine ArrayList in Java anlegen
Da eine ArrayList in Java kein primitiver Datentyp ist wie z.B. int oder char, müssen wir sie – ähnlich wie bei der Scanner-Klasse als Objekt einer Klasse anlegen, also mit new und einer Klammer() am Ende:
ArrayList liste = new ArrayList();
Nun haben wir eine leere ArrayList angelegt.
Falls ArrayList bei dir in rot angezeigt wird, musst du die Klasse ähnlich wie beim Scanner erst importieren. Dazu musst du vor deiner Klasse „import java.util.ArrayList;“ einfügen:
import java.util.ArrayList; public class StellDichVorV1 { public static void main(String[] args) {
Falls du mit IntelliJ arbeitest, kannst du wieder mit der linken Maustaste auf ArrayList klicken und die Tastatur-Kürzel ALT+ENTER benutzen, um die Klasse zu importieren.
2. Elemente in eine ArrayList hinzufügen und auslesen
Es ist sehr einfach, Elemente in unsere Liste einzufügen. Dazu brauchen wir lediglich den Befehl .add() benutzen:
liste.add(5); liste.add(7);
Nun umfasst unsere ArrayList liste die Elemente 5 und 7.
Um das auch zu überprüfen, geben wir das Ganze mit System.out.println() aus:
ArrayList liste = new ArrayList(); liste.add(5); liste.add(7); System.out.println(liste);
Die – durchaus stylische – Ausgabe des Ganzen:
[5, 7]
3. Ein Element aus einer ArrayList auslesen
Wollen wir z.B. das 4te Element einer ArrayList auswählen, so verwenden wir die Methode .get() dazu:
System.out.println(liste.get(3));
Achtung: Die Zählung beginnt wieder bei 0, deswegen müssen wir für das 4te Element die Zahl 3 in die Klammern einsetzen.
4. Die Länge bzw. Größe einer ArrayList herausfinden
Während wir bei Arrays mit .length herausfinden können, wie viele Elemente der Array hat, brauchen wir bei der Klasse ArrayList die Methode .size() dazu.
Dies lässt sich auch gut nutzen, um eine Schleife durch eine ArrayList „wandern“ zu lassen:
for (int i = 0; i < liste.size(); i++) { System.out.println(liste.get(i)); }
5. Die Position eines Elements in der ArrayList herausfinden
Um herauszufinden, an welcher Position der ArrayList sich ein bestimmter Wert befindet, können wir die Methode .indexOf() benutzen:
ArrayList liste = new ArrayList(); liste.add(5); liste.add(7); liste.add(2); liste.add(5); System.out.println(liste); System.out.println(liste.indexOf(2)); System.out.println(liste.indexOf(5));
Die Position vom Wert 2 in der Liste ist 2 (weil ähnlich wie bei Arrays die Zählung bei 0 beginnt), vom Wert 5 ist sie 0, weil immer nur das erste Ergebnis gewählt wird.
6. Herausfinden, ob sich ein Element in einer ArrayList befindet
Mit Hilfe der Methode .contains() können wir herausfinden, ob sich ein Element innerhalb einer ArrayList befindet:
if (liste.contains(7)) { System.out.println("7 ist in der Liste!"); }
Die Methode .contains() gibt dabei einen boolean-Wert zurück.
7. Elemente aus einer ArrayList entfernen
Wollen wir alle Elemente aus einer ArrayList entfernen, so geht das mit Hilfe der Methode .clear(), wollen wir nur einzelne Elemente entfernen, können wir .remove() benutzen:
liste.clear(); // entfernt ALLE Elemente der Liste liste.remove("Hallo"); // entfernt das Element mit dem VARIABLEN-WERT "Hallo" liste.remove(2); // entfernt das Element auf dem INDEX 2
Woher weiß Java nun, ob bei einer Liste mit .remove(2) das 3te Element oder der Wert 2 entfernt werden muss?
Im Zweifelsfall geht Java davon aus, dass wir den Index meinen, also die Position in der Liste.
Wollen wir nun, dass die Zahl 2 entfernt wird, können wir folgendes verwenden:
liste.remove(Integer.valueOf(5)); // entfernt die ZAHL 5 aus einer int-ArrayList
8. Eine Kopie einer ArrayList erstellen
Da ArrayList eine Klasse ist, können wir folgendes nicht tun, um eine Kopie der ersten ArrayList zu erhalten:
ArrayList liste1 = new ArrayList(); liste1.add(5); liste1.add(7); liste1.add(2); liste1.add(5); ArrayList liste2 = liste1;
Nun sind zwar in liste2 alle Elemente der liste1 drin, aber wenn wir etwas in liste2 verändern, verändern wir liste1 gleich mit. Beide Variablen zeigen also auf die gleiche Liste.
Wollen wir eine echte Kopie erstellen, brauchen wir die Methode .clone() dazu:
ArrayList liste2 = (ArrayList) liste.clone();
Achtung: Dies funktioniert aber nur, solange die Elemente in der ArrayList primitive Datentypen wie int oder char sind. Haben wir Objekte, die aus Klassen erzeugt wurden (wie z.B. ein Scanner) in der Liste, müssen wir die Kopie „händisch“ vornehmen.
9. Eine ArrayList sortieren lassen
Man kann eine ArrayList auch sortieren lassen, und dabei sogar bestimmen, auf welche Weise.
Der einfachste Weg wäre dieser, für aufsteigendes Sortieren:
liste2.sort(Comparator.naturalOrder());
Man kann aber auch selbst Comparator-Varianten erstellen usw., nur würde das den Rahmen dieses Tutorials sprengen.
Das waren erstmal die wichtigsten Methoden der Klasse ArrayList für dich.
Viel Freude damit!