Direkt zum Hauptinhalt springen
eLearner.app
Modul 4 · Lektion 2 von 28/14 im Kurs~15 min
Lektionen des Moduls (2/2)

Sammlungen und ArrayList

Herkömmliche Arrays in Java haben eine feste Größe, die zum Zeitpunkt der Erstellung definiert wird. Um mit Listen von Daten zu arbeiten, deren Größe sich dynamisch ändern kann, stellt Java das Collections Framework (Java-Sammlungs-Framework) zur Verfügung. Die am häufigsten verwendete Klasse ist ArrayList.

Die Klasse ArrayList und Generics

ArrayList implementiert ein in der Größe veränderbares Array im Speicher. Um eine ArrayList zu deklarieren, müssen wir den Typ der Elemente, die sie enthalten soll, in spitzen Klammern < > angeben. Diese Funktionalität wird als Generics bezeichnet.

Um ArrayList zu verwenden, müssen wir sie am Anfang der Datei aus java.util.ArrayList importieren.

Deklaration und Instanziierung:

Code
import java.util.ArrayList;

ArrayList<String> shoppingList = new ArrayList<>();

Hauptmethoden

Hier sind die grundlegenden Operationen auf einer ArrayList:

  1. add(element): Fügt ein Element am Ende der Liste hinzu.
  2. get(index): Gibt das Element an der angegebenen Position zurück (0-basiert).
  3. size(): Gibt die Anzahl der aktuell in der Liste vorhandenen Elemente zurück.
  4. remove(index): Entfernt das Element an der angegebenen Position.
Code
shoppingList.add("Pane");
shoppingList.add("Latte");

System.out.println("Elementi: " + shoppingList.size()); // Stampa 2
System.out.println("Primo elemento: " + shoppingList.get(0)); // Stampa "Pane"

Eine Liste durchlaufen (For-Each)

Die For-Each-Schleife ist die ideale Struktur, um alle Elemente einer Sammlung zu durchlaufen:

Code
for (String item : shoppingList) {
    System.out.println(item);
}

Array vs. ArrayList: Speicher und Leistung

Obwohl ArrayList viel flexibler ist als ein statisches Array, fallen Kosten in Bezug auf Leistung und Speicher an:

  • Statisches Array: Es wird in einem zusammenhängenden Speicherblock zugewiesen, hat feste Dimensionen und der Zugriff auf Elemente über den Index ist extrem schnell. Es speichert primitive Typen direkt ohne Overhead.
  • ArrayList: Intern verwaltet sie ein Array, das in der Größe geändert wird (wobei ein neues, größeres Array erstellt und die alten Elemente kopiert werden), wenn seine Anfangskapazität (normalerweise 10) überschritten wird. Darüber hinaus enthält es nur Referenzen auf Objekte, was für jedes Element einen Speicher-Overhead mit sich bringt.

Autoboxing und Unboxing

Da ArrayList nur Objekte aufnehmen kann, führt Java automatisch die Konvertierung zwischen primitiven Typen und ihren jeweiligen Wrapper-Klassen durch:

  • Autoboxing: Automatische Konvertierung vom primitiven Typ zur Wrapper-Klasse. Wenn Sie beispielsweise numbers.add(42) ausführen, konvertiert Java automatisch 42 (int) in Integer.valueOf(42) (Integer).
  • Unboxing: Automatische Konvertierung von der Wrapper-Klasse in den primitiven Typ. Wenn Sie beispielsweise int num = numbers.get(0) ausführen, führt Java intern die Konvertierung von Integer in int durch.

Probiere es aus

Übung#java.m4.l2.e1
Versuche: 0Wird geladen…

Importieren Sie ArrayList, deklarieren Sie eine ArrayList von String namens names. Fügen Sie der Liste Alice und Bob hinzu und geben Sie dann die Größe mit der Methode size() aus.

Editor wird geladen…
Hinweis anzeigen

Fügen Sie ganz oben `import java.util.ArrayList;` ein. Erstellen Sie die Liste mit `ArrayList<String> names = new ArrayList<>();`, fügen Sie die Elemente hinzu und geben Sie die Größe mit `names.size()` aus.

Lösung nach 3 Versuchen verfügbar

Übung#java.m4.l2.e2
Versuche: 0Wird geladen…

Deklarieren Sie eine ArrayList von Integer namens numbers, fügen Sie die Zahl 42 hinzu und geben Sie sie aus, indem Sie sie über den Index 0 mit get() abrufen.

Editor wird geladen…
Hinweis anzeigen

Verwenden Sie `ArrayList<Integer> numbers = new ArrayList<>();` (mit der Wrapper-Klasse Integer) und geben Sie sie mit `System.out.println(numbers.get(0));` aus.

Lösung nach 3 Versuchen verfügbar

Übung#java.m4.l2.e3
Versuche: 0Wird geladen…

Deklarieren Sie eine ArrayList von String namens colors. Fügen Sie der Liste die Farben Red, Green und Blue hinzu. Verwenden Sie schließlich eine For-Each-Schleife, um die Liste zu durchlaufen und jede Farbe auf dem Bildschirm auszugeben.

Editor wird geladen…
Hinweis anzeigen

Deklarieren Sie die Liste mit `ArrayList<String> colors = new ArrayList<>();`, fügen Sie die drei Farben hinzu und verwenden Sie eine `for (String c : colors)` Schleife, um sie mit `System.out.println(c);` auszugeben.

Lösung nach 3 Versuchen verfügbar