Vertiefung der Programmierung

Listen

Wiederholung

Welche Container-Typen
kennen wir?

Arrays

  • sind fester Bestandteil von Java
  • ​​Elemente können sein:
    • alle primitiven Typen (int, double usw.)
    • eigene Typen (Klassen)

Gibt es auch Nachteile?

⚠️ Größen sind statisch

  • kein Vergrößern/Verkleinern zur Laufzeit

⌨️ Beispiel Buch (Komposition)

Listen in Java

Listen vs. Arrays

pencil

live

Definition: LinkedList

LinkedList<Klasse> bezeichner = new LinkedList<Klasse*>();

* Klassen ist hier (rechts vom =) optional

Wichtig: für Klasse dürfen keine primitiven Datentypen (u.a. int, double) verwendet werden.

Wichtige Methoden (der Liste)

  • boolean add(E e): Fügt ein Element e vom Typ E hinzu
  • void add(int index, E e): Fügt Element an Stelle index ein
  • E get(int index): Liefert das Element an der Position index
    • Rückgabe: Element (vom Typ E)
  • int size(): Gibt die Anzahl der Elemente zurück
  • E remove(int index): Entfernt das Element an Stelle index
    • ​Rückgabe: das gelöschte Element (vom Typ E)
  • boolean remove(E e): Entfernt erstes Vorkommen von Element e 
  • boolean contains(E e): Prüft, ob ein Element e existiert
  • boolean isEmpty(): Prüft, ob die Liste leer ist
  • void clear(): Löscht alle Elemente der Liste

⌨️ Wichtige Methoden (der Liste)

Definition: ArrayList

* Klassen ist hier (rechts vom =) optional

Wichtig: für Klasse dürfen keine primitiven Datentypen (u.a. int, double) verwendet werden.

ArrayList<Klassen> bezeichner = new ArrayList<Klasse*>();

ArrayList

Unterschied zu Arrays:
automatische Anpassung der Größe (inkl. Kopieren)

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

persons.add("Maria");
persons.add("Johannes");

println(persons.get(0));
  • verhält sich im Speicher ähnlich wie Arrays
  • Methoden erlauben einfachen Zugriff auf Elemente
    • Hinzufügen
    • Entfernen
    • Alle löschen
  • schneller Zugriff auf Elemente (wahlfreier Zugriff)
  • ggf. langsam bei vielen Änderungen → häufiges Kopieren
pencil

live

LinkedList

LinkedList<String> persons;

persons = new LinkedList<>();

persons.add("Maria");
persons.add("Johannes");

println(persons.get(0));
  • Elemente sind untereinander verknüpft
    • es gibt Zeiger auf:
      • vorhergehendes Element
      • nachfolgendes Element 
    • ℹ️ erfordert mehr Speicherplatz
  • Zugriff auf Elemente langsamer 
  • schnell bei vielen Änderungen 

...

LinkedList vs. ArrayList

ArrayListLinkedList
Zugriff auf Element
Einfügen / Löschen
Speicherbedarf
Eignunghäufige wahlfreie
Zugriffe
viele dynamische Änderungen

Beide Strukturen haben ihre Daseinsberechtigung in Java.
Je nach Einsatz müssen Eigenschaften abgewogen werden.

⌨️ Beispiel

⌨️ Buch: Buchseiten als Liste (Komposition)

Zusammenfassung

  • Der Container-Typ List
    • variable Größe
    • dynamisch Elemente hinzufügen/entfernen
  • Einsatz bei Objektbeziehungen (Aggregation, usw.)
    • gut geeignet für Multiplizitäten 0..*, 1..*
  • Unterschiede:
    • Array vs. List
    • ArrayList vs. LinkedList