1. Einleitung
Dies ist die erste Vorlesung des Bonus-Levels. Wir sind dem Studium der OOP bereits sehr nahe gekommen. Und ich möchte Ihr Interesse wecken und ein wenig vorgreifen 😈. In diesem Level erzähle ich Ihnen von 5 interessanten Dingen:
- ♾️ Sie lernen, „unendliche“ Arrays zu erstellen
- 📖 Dann ein „persönliches Wörterbuch“ pflegen
- 💾 Danach mache ich Sie kurz mit der Dateiverarbeitung vertraut
- 🌐 Dann lernen wir, Bilder aus dem Internet herunterzuladen
- 🛰️ Und in der letzten Vorlesung des Levels werden Sie die Raumstation ISS in Echtzeit verfolgen
Wie das alles unter der Haube funktioniert, erfahren Sie in den kommenden Levels, und heute lernen Sie einfach, die von mir bereitgestellten Werkzeuge zu benutzen. Neugierig geworden? Dann legen wir los 😇.
Normale Arrays wiederholen
Erinnern wir uns an ein normales Array in Java:
int[] arr = new int[10];
Tolle Sache, aber es gibt ein paar Einschränkungen: Die Größe ist fix; man kann kein Element hinzufügen oder entfernen, ohne ein neues Array zu erstellen. Manchmal wünscht man sich jedoch ein Array, das je nach Bedarf wächst und schrumpft. Und wir haben eine großartige Lösung – das dynamische Array ArrayList!
ArrayList ist ein „intelligentes Array“, das automatisch wachsen und schrumpfen kann. Im Gegensatz zu einem normalen Array mit fester Größe kümmert sich ArrayList selbst darum, dass genügend Platz für neue Elemente vorhanden ist.
Ein unendliches Array erstellen
Um unsere ArrayList zu erstellen, schreiben wir Code der Form:
ArrayList<String> array = new ArrayList<String>()
Danach können wir Elemente hinzufügen:
array.add("Mary");
array.add("Kate");
Dynamisches Array für Ganzzahlen erstellen
Wie Sie sich vielleicht schon denken, muss der Typ der Elemente unseres dynamischen Arrays in spitzen Klammern angegeben werden. Dort kann man jeden Typ angeben, außer primitive Typen. Primitive Typen müssen durch ihre Wrapper-Typen ersetzt werden.
Beispiel:
ArrayList<Integer> numbers = new ArrayList<Integer>(); // int
ArrayList<Double> fees = new ArrayList<Double>(); // double
ArrayList<Boolean> yesList = new ArrayList<Boolean>(); // boolean
ArrayList<Character> chars = new ArrayList<Character>(); // char
Unsere ArrayList unterstützt keinen Zugriff per [index], aber sie bietet spezielle Methoden, die alle Ihre Bedürfnisse abdecken. Schauen wir uns die interessantesten an.
2. Methode add(element) – Element hinzufügen
Das Erste, was wir mit einer Liste tun, ist Daten hinzuzufügen. Dafür gibt es die Methode add. Sie legt ein Element ans Ende der Liste.
ArrayList<String> todo = new ArrayList<>(); // To-do-Liste
todo.add("ArrayList lernen");
todo.add("Tee machen");
todo.add("Spazieren gehen");
Nach diesen drei Zeilen haben wir eine Liste aus drei Strings. Im Gegensatz zum Array müssen wir die Größe nicht im Voraus angeben – sie wächst automatisch mit dem Hinzufügen.
Sehr praktisch: Man kann mit einer leeren Liste beginnen und sie nach und nach abhängig von Benutzeraktionen oder Programmeingaben befüllen.
3. Methode get(index) – Zugriff per Index
Jedes Element der Liste hat eine Ordnungsnummer – den Index. Die Indizierung beginnt immer bei null. Das heißt, das erste Element hat die Nummer 0, das zweite die Nummer 1 und so weiter.
Wenn wir ein Element anhand seiner Nummer holen möchten, verwenden wir die Methode get.
String task = todo.get(1);
System.out.println("Zweite Aufgabe: " + task);
Ausgabe:
Zweite Aufgabe: Tee machen
Wichtig: Wenn man auf einen nicht vorhandenen Index zugreift (zum Beispiel todo.get(10) bei einer Liste mit drei Elementen), wirft das Programm eine IndexOutOfBoundsException. Daher sollte man sich entweder des Indexes sicher sein oder die Größe der Liste über size() prüfen.
4. Methode set(index, element) – Element ersetzen
Manchmal muss ein Element in der Liste ersetzt werden. In diesem Fall muss man es nicht löschen und neu hinzufügen – es genügt, die Methode set zu verwenden.
todo.set(1, "Kaffee kochen");
System.out.println("Jetzt ist die zweite Aufgabe: " + todo.get(1));
Ausgabe:
Jetzt ist die zweite Aufgabe: Kaffee kochen
Damit ist set eine Möglichkeit, die Liste „on the fly“ zu aktualisieren.
5. Methode remove(index) – Element entfernen
Ein Element kann aus der ArrayList per Index entfernt werden.
todo.remove(0);
System.out.println("Die erste Aufgabe ist jetzt: " + todo.get(0));
Ausgabe:
Die erste Aufgabe ist jetzt: Kaffee kochen
Wir haben das erste Element (Index 0) entfernt. Jetzt ist das zweite zum ersten geworden, und das dritte zum zweiten. Wichtiger Punkt: Nach dem Entfernen werden die Elemente der Liste verschoben.
Das kann für Anfänger manchmal überraschend sein. Beachten Sie stets, dass die Indizes nach dem Entfernen neu berechnet werden.
6. Methode size() – die Größe der Liste ermitteln
Die Methode size gibt die Anzahl der Elemente in der Liste zurück. Das ähnelt der Eigenschaft length bei Arrays, aber bei ArrayList ist es eine Methode.
System.out.println("Insgesamt Aufgaben: " + todo.size());
Ausgabe:
Insgesamt Aufgaben: 2
Häufig wird size in Schleifen verwendet, um alle Elemente zu durchlaufen:
for (int i = 0; i < todo.size(); i++)
{
System.out.println(todo.get(i));
}
7. Methode contains(element) – Vorhandensein prüfen
Um herauszufinden, ob ein benötigtes Element in der Liste vorhanden ist, kann man contains verwenden. Diese Methode liefert true oder false.
System.out.println(todo.contains("Spazieren gehen"));
System.out.println(todo.contains("Tee machen"));
Ausgabe:
true
false
Sehr nützlich, wenn Sie Duplikate vermeiden oder die Bedingung „Gibt es dieses Element in der Liste?“ prüfen möchten.
8. Elemente durchlaufen
Es gibt zwei Möglichkeiten, eine Liste zu durchlaufen.
Indexbasierte Schleife
Diese Variante braucht man, wenn die Positionsnummer wichtig ist.
for (int i = 0; i < todo.size(); i++)
{
System.out.println(i + ": " + todo.get(i));
}
for-each-Schleife
Wenn die Nummer egal ist und Sie einfach alle Elemente ansehen möchten, verwenden Sie die for-each-Schleife.
for (String task : todo)
{
System.out.println("Aufgabe: " + task);
}
Diese Schleife ist kürzer und leichter zu lesen.
9. Praxis: ArrayList in Ihrer Anwendung
Erstellen wir eine To-do-Liste, die man befüllen und ausgeben kann:
import java.util.ArrayList;
import java.util.Scanner;
public class TodoApp
{
public static void main(String[] args)
{
ArrayList<String> todo = new ArrayList<>();
Scanner console = new Scanner(System.in);
while (true)
{
System.out.print("Geben Sie eine Aufgabe ein (oder eine leere Zeile zum Beenden): ");
String task = console.nextLine();
if (task.isEmpty()) break;
todo.add(task);
}
System.out.println("Ihre To-do-Liste:");
for (int i = 0; i < todo.size(); i++)
{
System.out.println((i + 1) + ". " + todo.get(i));
}
}
}
Ich hoffe, Ihnen hat unser „unendliches“ Array gefallen. Es ist die erste der Java-Collections, mit der Sie sich vertraut gemacht haben. Ich denke, die anderen werden Ihnen ebenfalls gefallen.
GO TO FULL VERSION