Sets, Queues

Datentypen und Exceptions in Java

Jim White

Java Developer

Set-Schnittstelle

  • Set ist auch eine Art Collection
    • Erlaubt keine doppelten Objekte
      • Garantiert, dass jedes Element einzigartig ist
    • Set-Objekte sind in der Regel ungeordnet (daher ohne Index)
  • Lists sind wie eine Pillenbox: jedes Objekt liegt an einem festen Platz
  • Sets sind wie ein Sack: Objekte liegen zufällig durcheinander

Listen sind wie Pillenboxen: Objekte liegen an einem Index an fester Position

Sets sind wie Säcke: Objekte liegen zufällig und ungeordnet

1 Bilder mit freundlicher Genehmigung von Wikimedia Commons
Datentypen und Exceptions in Java

List vs Set

  • Wann du ein Set verwendest
    • Garantiert die Eindeutigkeit seiner Elemente
    • Schneller bei Nachschlagen
      • Prüfen, ob ein Objekt im Set ist
    • Speicherfreundlicher, je größer die Collection wird
    • Gut zum Mitgliedschaftstest in Caches
      • Beispiel: einzigartige Wörter in einem Dokument finden
Datentypen und Exceptions in Java

List vs Set

  • Wann du eine List verwendest
    • Erhält die Reihenfolge und erlaubt Duplikate
    • Besser beim Zugriff per Position
    • Besser beim Hinzufügen/Löschen per Index
    • Gut, wenn die Reihenfolge wichtig ist
      • z. B.: Schritte einer Sequenz oder Songs in einer Playlist verwalten
Datentypen und Exceptions in Java

Set-Implementierung

  • Viele Set-Implementierungen
    • HashSet ist eine beliebte Umsetzung
  • HashSet
    • Ein ungeordneter Beutel von Objekten
    • Schneller als andere Set-Implementierungen bei Einfügen, Löschen und Suchen
    • Nutzt allgemein mehr Speicher als andere Set-Implementierungen
    • Erlaubt genau ein null

HashSets sind ungeordnete Beutel von Objekten und erlauben ein null

Datentypen und Exceptions in Java

HashSet-Konstruktion

  • Verwende einen generischen parametrisierten Konstruktor, um ein HashSet zu erstellen
    HashSet<String> set = new HashSet<String>();
    
  • HashSet liegt im Paket java.util
    • Erfordert einen Import
    • import java.util.HashSet
Datentypen und Exceptions in Java

HashSet-Methoden

  • Mit .add() und .remove() Objekte hinzufügen/entfernen
  • Mit .remove() und dann .add() ein Objekt ersetzen
  • Mit .contains() prüfen, ob ein Objekt bereits existiert
  • Duplikate werden ignoriert
  • Erlaubt null
  • Reihenfolge nicht garantiert
set.add("France");
set.add("Japan");
set.add("Brazil");
set.add("Egypt");
set.add(null); // null is allowed
set.remove("Brazil");
boolean z =
  set.contains("France"); // z is true
set.add("Japan"); // Ignored
System.out.println(set);
[null, Japan, Egypt, France]
Datentypen und Exceptions in Java

Queue-Schnittstelle

  • Queue-Datenstruktur verarbeitet Objekte in First-in-first-out-(FIFO)-Reihenfolge
    • Erst hinzugefügt, zuerst entfernt
    • Wie eine Schlange am Ticketschalter
    • Hat Kopf- und Endelement

Bild einer Queue mit Kopf (Anfang) und Ende (Schluss) markiert

  • Mehrere Queue-Implementierungen
    • Ähnlich im Verhalten und in den Operationen
Datentypen und Exceptions in Java

ArrayBlockingQueue

  • Beliebte Queue-Implementierung
    • Intern ein Array
  • Achtung: ArrayBlockingQueue liegt im Paket java.util.concurrent
    • Nicht im Paket java.util
Datentypen und Exceptions in Java

ArrayBlockingQueue-Konstruktion

  • Verwende einen generischen parametrisierten Konstruktor, um eine ArrayBlockingQueue zu erstellen
    • Hat eine Kapazität bzw. Objektanzahl, die im Konstruktor festgelegt wird
import java.util.concurrent;  // Am Anfang der Klasse

// Neue Queue, die 4 Strings speichern kann
ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(4);
Datentypen und Exceptions in Java

ArrayBlockingQueue-Methoden

  • Mit .add(object) oder .offer(object) ans Ende hinzufügen
    • .add(object) wirft eine Exception, wenn die Queue voll ist
    • .offer(object) ignoriert das neue Objekt, wenn voll
ArrayBlockingQueue<String> queue 
    = new ArrayBlockingQueue<String>(4);
queue.offer("France");
queue.offer("Japan");
queue.offer("Brazil");
queue.offer("Egypt");
queue.offer("China"); // Ignores China

// Causes IllegalStateException
// queue.add("China");

System.out.println(queue);
[France, Japan, Brazil, Egypt]
Datentypen und Exceptions in Java

ArrayBlockingQueue-Methoden

  • Mit .remove() oder .poll() vom Kopf entfernen
    • .remove() wirft eine Exception, wenn die Queue leer ist
    • .poll() gibt null zurück, wenn die Queue leer ist
  • Erlaubt kein null
ArrayBlockingQueue<String> queue 
    = new ArrayBlockingQueue<String>(4);
String x = queue.poll(); // x is null
// Causes NoSuchElementException
// String y = queue.remove();

queue.offer("France");
String next = queue.poll();
System.out.println(next);
France
Datentypen und Exceptions in Java

Lass uns üben!

Datentypen und Exceptions in Java

Preparing Video For Download...