Listen

Datentypen und Exceptions in Java

Jim White

Java Developer

List-Interface

  • List-Interface, Unter-Interface von Collection
    • Definiert eine geordnete Gruppe von Objekten
    • Kann doppelte Objekte enthalten
  • Mehrere Implementierungen von List
    • Im Verhalten ähnlich
    • Implementierung bestimmt die interne Verwaltung der Objekte
Datentypen und Exceptions in Java

List-Implementierungen

  • ArrayList – eine dynamische, indizierte (wie Arrays), geordnete Liste von Objekten

ArrayList sind ähnlich wie Java-Arrays mit indizierten Elementen

  • LinkedList – Objekte per Verweise mit dem nächsten und vorherigen Objekt verbunden.

LinkedList sind Objektlisten, verbunden über Zeiger

  • Unabhängig von der Implementierung: Objekte gleich hinzufügen, entfernen, ändern
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/List.html for List types and details
Datentypen und Exceptions in Java

ArrayList

  • Instanz mit new erzeugen und Generics für den Inhaltstyp nutzen
  • Objekt ans Listenende hinzufügen mit .add(object)
  • Objekt abrufen mit .get(index)
    • ArrayList hat nullbasierten Index
  • Objekt ersetzen/ändern mit .set(index, object)
  • Objekt entfernen mit .remove(index)
  • Alle Objekte leeren mit .clear()
  • Anzahl der Objekte mit .size()
import java.util.ArrayList;
...
ArrayList<String> animals
  = new ArrayList<String>();

animals.add("horse"); animals.add("cow"); animals.add("horse"); // Duplicates allowed
String c = animals.get(1); // c="cow" animals.set(1, "chicken");
// Removes the first horse animals.remove(0); // Removes all objects animals.clear();
animals.size();
Datentypen und Exceptions in Java

Objekte und Primitives

  • Wrapper verwenden, um Primitives zu Collections-Objekten hinzuzufügen
  • Hinzugefügte Primitives werden „autoboxed"
    • Autoboxing: das automatische Verpacken eines Primitive in einen Wrapper
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(new Integer(5));
list.add(6);  // 6 wird automatisch in Integer verpackt und dann hinzugefügt
  • Autoboxing funktioniert mit allen Collections-Objekten
Datentypen und Exceptions in Java

Heterogene Collections

  • Datenstrukturen des Collections Framework können heterogen sein
    • Heterogen = Objekte verschiedener Typen enthalten
    • Object als parametrisierten Typ verwenden
ArrayList<Object> list = new ArrayList<Object>(); // Beliebige Objekte zulassen
list.add(new Integer(5)); // Integer hinzufügen
list.add(6); // Integer per Autoboxing hinzufügen
list.add("Hello"); // String hinzufügen
Datentypen und Exceptions in Java

Eine List durchlaufen

  • Mit der „for each"-Syntax durch die Objekte einer List iterieren
ArrayList<String> animals = new ArrayList<String>();
animals.add("horse");
animals.add("cow");
animals.add("chicken");

for (String animal : animals) { // for-each, um alle in der ArrayList zu durchlaufen
    System.out.println(animal);
}
horse
cow
chicken
Datentypen und Exceptions in Java

List mit println

  • Den Inhalt einer List-Instanz (z. B. ArrayList) mit println ausgeben
ArrayList<String> animals = new ArrayList<String>();
animals.add("horse");
animals.add("cow");
animals.add("chicken");
System.out.println(animals);  // Alle Elemente der ArrayList anzeigen

ArrayList<Object> list = new ArrayList<Object>();
list.add(5);
list.add("Hello");
System.out.println(list);  // Alle Elemente der ArrayList anzeigen
[horse, cow, chicken]
[5, Hello]
Datentypen und Exceptions in Java

LinkedList

  • LinkedList werden wie ArrayList-Instanzen erstellt
  • LinkedList haben die gleichen Methoden wie ArrayList
import java.util.LinkedList;
...
LinkedList<String> cars // Create a new ...
  = new LinkedList<String>(); // ... LinkedList
cars.add("Ford"); // Add an object to the list
cars.add("Mercedes");
String c = cars.get(1);
cars.set(1, "Toyota"); // Replace an object
System.out.println(cars); // Display the list
cars.remove(0); // Remove an object
cars.clear();  // Remove all objects
cars.size(); // Get the list length
[Ford, Toyota]
Datentypen und Exceptions in Java

Weitere LinkedList-Methoden

  • Einige zusätzliche Methoden
    • addFirst() fügt am Listenanfang ein
    • addLast() fügt am Listenende ein
    • removeFirst() entfernt vom Anfang
    • removeLast() entfernt vom Ende
cars.addFirst("Fiat"); // Am Anfang hinzufügen
cars.addLast("BMW"); // Am Ende hinzufügen
cars.removeFirst(); // Erstes Objekt entfernen
cars.removeLast(); // Letztes Objekt entfernen
Datentypen und Exceptions in Java

Ähnlichkeiten von Collection-Typen

  • ArrayList und LinkedList wirken gleich
    • Auch andere Collections-Typen haben Ähnlichkeiten
    • Das ist beabsichtigt
  • Sie teilen sich ein Interface: List
    • Ein Beispiel für Polymorphie (‚viele Formen')
Datentypen und Exceptions in Java

ArrayList vs LinkedList

  • Operationen auf ArrayList und LinkedList (oder jeder List) sind gleich
    • Die Wahl des List-Typs hängt vom Einsatz ab
  • Überlegungen zur ArrayList:
    • Schnell beim wahlfreien Zugriff (z. B.: list.get(11))
    • Langsamer beim Einfügen/Entfernen in der Mitte
    • Weil Objekte beim Einfügen/Entfernen physisch verschoben werden müssen

In der Mitte einer ArrayList einzufügen erfordert viel Verschieben

Datentypen und Exceptions in Java

ArrayList vs LinkedList

  • Überlegungen zur LinkedList:
    • Langsamer beim wahlfreien Zugriff (z. B.: list.get(11))
    • Schneller beim Einfügen/Entfernen in der Mitte
    • Weil keine Objekte physisch verschoben werden, nur ein paar Referenzen geändert

In der Mitte einer LinkedList einzufügen erfordert nur das Ändern einiger Zeiger

Datentypen und Exceptions in Java

Lass uns üben!

Datentypen und Exceptions in Java

Preparing Video For Download...