Folien



(letzte Synchronisation der PDF-Präsentation: 02.03.2017)

Falls keine PDF-Präsentation zu sehen ist, klicken Sie zum Download hier: Direktdownload PDF-Präsentation

Listen sind ein Teil des Collections-Frameworks. ArrayList ist eine Bibliotheksklasse aus dem Paket java.util.* und muss importiert werden.

ArrayList und LinkedList sind im Wesentlichen gleich; die ArrayList ist schneller bei Zugriff auf einzelne Elemente, die LinkedList ist schneller bei Operationen wie löschen, hinzufügen.

Der wesentliche Unterschied zwischen Arrays und der ArrayList: Die ArrayList ist dynamisch, d.h. in der Größe flexibel. In gewissen Kontexten sind Arrays perfomarmenter, im Schulunterricht können wir jedoch immer ArrayList benutzen.

ArrayList: Syntax

In Spitzklammern wird der Datentyp, den die Liste enthält, angegeben:

Java-Code
  ArrayList<String> eineListe = new ArrayList<String>();  

Die ArrayList kann keine primitiven Datentypen (int ...) verwalten, sondern nur Objekte. Möchte man primitive Datentypen in einer ArrayList speichern, muss man Wrapperklassen benutzen:

Java-Code
  ArrayList<Integer> eineListe = new ArrayList<Integer>();  

Wichtige Methoden 1

Wir gehen von dieser Liste aus:

Java-Code
  ArrayList<String> liste = new ArrayList<String>();  

Element ausgeben

liste.get(13)

Element einfügen (ohne Positionsangabe)

liste.add("Heinrich")

Element einfügen (mit Positionsangabe)

liste.add(0, "Heinrich")

Element ändern

liste.set(0, "Heini")

Element entfernen

liste.remove("Heinrich")

liste.remove(1) // Index

Größe zurückgeben

liste.size();

Sie können jetzt unten Aufgabe 1 ("Java_30-ArrayList-1: Lieblingsfächer") bearbeiten.

Wichtige Methoden 2

Wieder gehen wir von dieser Liste aus:

Java-Code
  ArrayList<String> liste = new ArrayList<String>();  

Prüfen, ob Objekt enthalten ist

liste.contains("Heinri")

Welchen Index hat ein Objekt?

liste.indexOf("Heinri")

Liste löschen

liste.clear();

Wenden Sie diese Methoden an in Aufgabe 2 unten ("Java_30-ArrayList-2: Lottozahlen")

Listen ausgeben/durchlaufen

Grundsätzlich gibt es drei Möglichkeiten, die Inhalte einer ArrayList auszugeben:

toString()

Mit toString() wird der Inhalt der ArrayList in einen einzigen String verpackt. Damit kann man natürlich nicht arbeiten, aber ganz hilfreich, um mal rasch in eine ArrayList reinzuschauen:

Java-Code
  ArrayList<Integer> liste = new ArrayList<Integer>(); liste.add(12); liste.add(1000);   System.out.println(liste.toString());  

foreach-Schleife

Wie auch beim Array funktioniert bei der ArrayList eine foreach-Schleife:

Java-Code
  ArrayList<Integer> liste = new ArrayList<Integer>(); liste.add(12); liste.add(1000);   for(int ausgabe : liste) { System.out.println(ausgabe); }  

ListIterator

Der ListIterator durchläuft die ArrayList und bietet zusätzlich einige Methoden zur Verarbeitung:

Java-Code
  ArrayList<Integer> liste = new ArrayList<Integer>(); liste.add(12); liste.add(1000);   ListIterator<Integer> li = liste.listIterator();   while(li.hasNext()) { System.out.println(li.next()); }  

next() springt zum nächsten Element der Liste. Der Index des aktuellen Elements wird mit li.nextIndex() abgefragt.

Üben Sie die Listenausgabe mit Aufgabe 3 unten ("Java_30-ArrayList-3: Listen ausgeben").

Übungen

Alle Übungen finden Sie in der Materialsammlung (dort auch alle zusätzlichen Dateien wie Bilder, Klassendiagramme oder HTML-Vorlagen!).

Die aktuelle Übung können Sie hier als txt-File herunterladen.


***** Übungen: Java - ArrayList *****

Java_30-ArrayList-1: Lieblingsfächer

Erstellen Sie eine ArrayList, die Ihre zwei Lieblingsfächer enthält.
Oh, Entschuldigung: Es sollten drei Lieblingsfächer sein. Fügen Sie noch ein drittes ein.
Durchlaufen Sie die Liste mit einer for-Schleife (das geht eigentlicht anders, lernen wir aber noch) und geben Sie die Lieblingsfächer aus im Format  "Meine Lieblingsfächer sind: Deutsch Englisch Erdkunde"
Ändern Sie das erste Fach in "Leibesübung".






Java_30-ArrayList-2: Lottozahlen

Die Lottozahlen vom Samstag waren 1,17,25,30,31,33. Speichern Sie sie in einer ArrayList "lottozahlen".
Prüfen Sie, ob sich die Zahl 12 in der Liste befindet. Prüfen Sie, ob sich die Zahl 31 in der Liste befindet.
Lassen Sie sich die Länge der Liste ausgeben (es müsste 6 herauskommen).
Angenommen, Sie würden diesen Befehl eingeben:

lottozahlen.remove(1);

Was glauben Sie: Welche Zahl würde entfernt werden?

Probieren Sie es aus, NACHDEM Sie Ihre Vermutung angestellt haben.

(Lösung: lottozahlen.remove((Integer)1);)




Java_30-ArrayList-3: Listen ausgeben

Erstellen Sie mit einer for-Schleife eine ArrayList, die die Zahlen 10, 20, 30 ... bis 1000 enthält.
Lassen Sie sich alle Elemente ausgeben,
- einmal mit einer foreach-Schleife,
- einmal mit dem ListIterator





Java_30-ArrayList-4: ArrayList mit Objekten: Tierheim (schwierig)

1) Programmieren Sie die Klassen "Tier" und "Tierart" wie im Klassendiagramm
/16java/java31-arrayList_bild_Tiere.png

Die Methode alleDatenAusgeben() in der Klasse Tierart erzeugt eine Konsolenausgabe in Form von:
"Tierart: Hund, Anzahl Beine: 4"

2) Erzeugen Sie drei Tierarten und einige Tiere (z.B. 2 Hunde, 3 Spinnen, 2 Fische).

3) Erzeugen Sie eine ArrayList namens tierheim, die Objekte der Klasse Tier aufnehmen kann. Fügen Sie die Tiere, die Sie angelegt haben, in die Liste ein.

4) Lassen Sie sich zur Kontrolle die Länge der ArrayList ausgeben.

5) Lassen Sie sich den Namen und die Anzahl der Beine des Tiers mit Index 0 ausgeben.

6) Durchlaufen Sie die tierheim-Liste und lassen Sie für alle Tiere den Namen und die Spezifikationen der Tierart (alleDatenAusgeben()) ausgeben.
Ergänzungsaufgabe zu 6) Tipp: Verwenden Sie hier die ListIterator-Methode nextIndex(); diese gibt Ihnen den Indexwert des aktuellen Elements zurück. Vergessen Sie nicht, am Ende der while-Schleife die ListIterator-Methode next() zu verwenden.

7) Lassen Sie sich in einer Schleife die Daten aller Tiere _nur einer Tierart_ ausgeben (also bspw. alle Hunde). Sie können diese Aufgabe kurz halten, indem Sie Aufgabe 6 aufbohren.




Java_30_ArrayList-5: ArrayList-Methoden verwenden

Gegeben sei eine ArrayList<String> mit dem Bezeichnernamen besucherListe. Wie lautet der vollständige Befehl, …
a) … um ein Element mit dem Wert "Hugo" einzufügen?
Antwort

b) … um ein Element mit dem Wert "Hugo" an Position 0 einzufügen?
Antwort

c) … um direkt nach b) das Element mit dem Wert "Hugo" zu löschen?
Antwort

d) … um herauszufinden, welchen Index das Element mit dem Wert "Hugo" hat?
Antwort

e) … um herauszufinden, ob sich ein Element mit dem Wert "Hugo" in der Liste befindet?
Antwort