ArrayList

Einführung

In der Programmierung ist ein dynamisches Array eine Listenstruktur, in die beliebig viele Objekte hinzugefügt und dann auch wieder entfernt werden können. In Java wird ein dynamisches Array durch die Klasse ArrayList realisiert. Die Klasse ArrayList befindet sich in der Standard-Bibliothek java.util.*. Als Klasse handelt es sich bei der ArrayList um einen komplexen Datentyp. Werden keine Generics definiert, werden alle Objekte als Instanzen der Super-Klasse Object in der ArrayList abgelegt.

Import

Als erstes muss die Klasse ArrayList aus der Java Standard-Bibliothek importiert werden:

import java.util.*;

Deklaration

Um eine ArrayList als Instanz- oder lokale Variable verwenden zu können, muss sie zuerst deklariert werden. Es folgt eine Deklaration einer Instanzvariable mit dem Namen personenListe vom Typ ArrayList mit privater Sichtbarkeit:

private ArrayList personenListe;

Objekterzeugung

Nach der Deklaration gibt es noch keine Referenz auf ein Objekt der Klasse ArrayList. Eine Objekterzeugung ist erforderlich. Hierfür muss nach dem Schlüsselwort new der Konstruktor der Klasse ArrayList aufgerufen werden; also ArrayList();

personenListe = new ArrayList();

Deklaration und Objekterzeugung können auch in einer Zeile stehen:

private ArrayList personenListe = new ArrayList();

Methoden

Nach der Deklaration und der Objekterzeugung steht das Objekt personenListe der Klasse ArrayList zur Verfügung. Mittels Punktnotation können nun die Methoden des Objektes aufgerufen werden. Durch personenListe.add(object) wird die Methode add am Objekt aufgerufen. Die Methode add erwartet einen Eingabeparameter.

Alle Methoden der Klasse ArrayList wurden in der API dokumentiert. Eine umfangreiche Dokumentation der Methoden der ArrayList ist auf Deutsch hier zu finden:

dpunkt.de/java/Referenz

Hier ein verkürzter Auszug:

  • boolean add (Object o) fügt ein Objekt ans Ende der dynamischen Liste.

  • void add(int index,Object o) fügt ein Objekt o an die Stelle Index ein. Alle evtl. folgenden Elemente werden um ein Element nach hinten verschoben.

  • boolean remove (Object o) löscht das Objekt o aus der dynamischen Liste.

  • int size() liefert die Anzahl der in der dynamischen Liste enthaltenen Objekte.

  • boolean isEmpty() bestimmt, ob die dynamischen Liste leer ist.

  • boolean contains(Object o) bestimmt, ob das Objekt o in der dynamischen Liste enthalten ist.

  • Object get(int index) liefert ein Element an der Stelle des Index.

  • void set (int index,Object o) ersetzt das bestehende Objekt an der Index-Position durch das Objekt o.

Generics

Um festzulegen, dass nicht alle Instanzen als Objekte der Super-Klasse Object in die ArrayList gespeichert werden, können sogenannte Generics definiert werden. Hierdurch wird festgelegt, dass ausschließlich Objekte einer bestimmten Klasse in die ArrayList Instanz abgelegt werden können. Generics werden in spitze Klammern geschrieben <>. In das Klammerpaar wird ein Klassenname eingefügt.

private ArrayList <Mitarbeiter> mitarbeiterListe;

Hier können nur Instanzen der Klasse Mitarbeiter in mitarbeiterListe abgelegt werden. Somit kann man sich auch darauf verlassen, dass nur Objekte der Klasse Mitarbeiter aus mitarbeiterListe entnommen werden können.

Generics müssen, wenn sie bei der Deklaration vorgesehen sind, auch bei der Objekterzeugung angeben werden. Die spitzen Klammern mit dem Klassennamen werden nach dem Konstruktornamen und vor den Eingabeparametern eingetragen.

mitarbeiterListe = new ArrayList <Mitarbeiter>();

Deklaration und Objekterzeugung können auch hier in einer Zeile stehen:

private ArrayList <Mitarbeiter> mitarbeiterListe = new ArrayList <Mitarbeiter>();

Beispiel

// Schlüsselwort import leitet den Verweis auf eine Bibliothek ein

import java.util.*;

public class Salon

{

// Es folgen Deklarationen von Attributen

private String name;

private ArrayList<Mitarbeiter> mitarbeiterListe;

private ArrayList<Kunde> kundenListe;

private ArrayList<Termin> terminListe;

// Dies ist ein Konstruktor

public Salon(String name){

this.name = name;

mitarbeiterListe = new ArrayList<Mitarbeiter>();

kundenListe = new ArrayList<Kunde>();

terminListe = new ArrayList<Termin>();

}

// Es folgen Methoden

// Standard-Getter-Methode

public ArrayList<Mitarbeiter> getMitarbeiterListe(){

return mitarbeiterListe;

}

// Standard-Setter-Methode

public void setMitarbeiterListe(ArrayList<Mitarbeiter> mitarbeiterListe){

this.mitarbeiterListe = mitarbeiterListe;

}

public void fuegeMitarbeiterHinzu(Mitarbeiter m){

this.mitarbeiterListe.add(m);

}

public void entferneMitarbeiter(Mitarbeiter m){

this.mitarbeiterListe.remove(m);

}

public Mitarbeiter findeMitarbeiter(String nachname){

for(Mitarbeiter aktuellerMitarbeiter:mitarbeiterListe){

if(aktuellerMitarbeiter.equals(nachname)){

return aktuellerMitarbeiter;

}

}

return null;

}

public Kunde findeKunden(String nachname){

for(Kunde aktuellerKunde:kundenListe){

if(aktuellerKunde.equals(nachname)){

return aktuellerKunde;

}

}

return null;

}

}