====== Objektsammlungen (ArrayList) ====== Java bringt zahlreiche **Bibliotheksklassen** mit, die zwar streng genommen nicht Teil der Sprache sind, aber so eng mit dem Sprachkern verbunden sind, dass diese Genze teilweise verschwimmt. In diesem Abschnitt wollen wir uns die Bibliotheksklasse ''ArrayList()'' anschauen, die uns in vielen Aspekten an unsere zuvor selbst implementierte verkettete Liste erinnern wird. Die Klasse ArrayList() stellt eine einfache Art der **Objektsammlung** dar: //Eine unsortierte, aber geordnete Liste flexibler Größe//((Das erinnert sehr an die verkette Liste, nicht wahr...)) Kapitel 4 im Buch, S. 131-181. Den für die Übungen dieses Kapitels nötigen Beispielcode findest du hier: * [[https://codeberg.org/qg-info-unterricht/jlmb-musiksammlung-v1|Musiksammlung v1]] * [[https://codeberg.org/qg-info-unterricht/jlmb-musiksammlung-v2|Musiksammlung v2]] * [[https://codeberg.org/qg-info-unterricht/jlmb-musiksammlung-v3|Musiksammlung v3]] * [[https://codeberg.org/qg-info-unterricht/jlmb-musiksammlung-v4|Musiksammlung v4]] * [[https://codeberg.org/qg-info-unterricht/jlmb-musiksammlung-v5|Musiksammlung v5]] * [[https://codeberg.org/qg-info-unterricht/jlmb-artikelbestand|Artikelbestand]] * [[https://codeberg.org/qg-info-unterricht/jlmb-auktion|Auktion]] * [[https://codeberg.org/qg-info-unterricht/jlmb-verein|Verein]] ====== Zentrale Konzepte ====== * **Sammlung:** Sammlungsobjekte sind Objekte, die eine beliebige Anzahl anderer Objekte enthalten können. * **Schleife:** Eine Schliefe wird verwendet, um einen Block von Anweisungen wiederholt auszuführen. * **Iterator:** Ein Iterator ist ein Objekt, mit dem über alle Elemente einer Sammlung iteriert werden kann. * **null**: ''null'' hat die Bedeutung "kein Objekt". Eine Objektvariable mit dem Wert ''null'' verweist nicht auf ein konkretes Objekt. ===== Aufgaben zur Musiksammlung-v1 ===== Untersuche das Projekt Musiksammlung-v1: https://codeberg.org/qg-info-unterricht/jlmb-musiksammlung-v1 ---- {{:aufgabe.png?nolink |}} === (A1) === * Öffne das Projekt und erzeuge ein Objekt der Klasse Musiksammlung. * Füge einige Dateinamen ein. * Was macht die Methode ''gibAnzahlDateien''? * Wie ist die Methode ''dateiAusgeben'' aufzurufen? Welche Funktion hat der Parameter, der zu übergeben ist? Welche Werte darf er annehmen? ---- {{:aufgabe.png?nolink |}} === (A2) === Erzeuge ein neues Objekt der Klasse Musiksammlung und rufe dann sofort die Methode ''entferneDatei(0)'' auf. Erhältst du eine Fehlermeldung? Würdest du erwarten, dass ein Fehler auftritt? ---- {{:aufgabe.png?nolink |}} === (A3) === Erzeuge ein neues Musiksammlungsobjekt, füge zwei Titel ein und betrachte den Zustand deiner Sammlung, indem du mit der Methode ''dateiAusgeben()'' für die verschiedenen Indizes alle gespeicherten Titel betrachtest. Lösche den Titel mit dem Index 0 - was zeigt ''dateiAusgeben(0)'' jetzt an? Was kannst du daraus folgern? ==== Die for-each Schleife ==== Um die Elemente einer Array-List bequem sequenziell verarbeiten zu können, bietet Java die for-each-Schleife: for (Elementtyp element: sammlung) { } ((ArrayList ist eine Unterklasse von Collection, also eine Sammlung)) Für unsere Musiksammlung könnte das so aussehen: for (String dateiname: dateien) { // tu etwas mit dateiname } ---- {{:aufgabe.png?nolink |}} === (A4) === * Implementiere eine Methode ''gibAlleDateienAus()'' mit Hilfe der ''for-each'' Schleife. * Implementiere eine Methode ''gibAlleDateienAusF()'' mit Hilfe einer ''for''-Schleife. * Implementiere eine Methode ''gibAlleDateienAusW()'' mit Hilfe einer ''while''-Schleife. ---- {{:aufgabe.png?nolink |}} === (A5) === In einer Klasse Spielleiter soll mit Hilfe einer ArrayList eine Spielerinnen-Liste verwaltet werden. Implementiere diese Funktionalität in folgendem BlueJ-Projekt https://codeberg.org/qg-info-unterricht/bluej-spielerliste. ==== Lösungen zu den Aufgaben im Buch ==== * [[.lsg_buch:start|Lösungen]] ==== Material ==== {{simplefilelist>.:*}}