Sets, Queues

Gegevenstypen en uitzonderingen in Java

Jim White

Java Developer

Set-interface

  • Set is ook een soort Collection
    • Staat geen duplicaten toe
      • Garandeert unieke elementen
    • Set-objecten zijn meestal ongesorteerd (dus geen index)
  • Lists zijn als een pillendoos; elk object op een vaste plek
  • Sets zijn als een zak; objecten liggen willekeurig door elkaar

Lists zijn als pillendozen waar objecten op een specifieke index liggen

Sets zijn als zakken waarin objecten willekeurig en ongeordend liggen

1 Afbeeldingen met dank aan Wikimedia Commons
Gegevenstypen en uitzonderingen in Java

List vs Set

  • Wanneer gebruik je een Set
    • Garandeert unieke elementen
    • Sneller voor lookups
      • Checken of een object in een Set zit
    • Efficiënter met geheugen naarmate de collectie groeit
    • Goed voor lidmaatschapstest in caches
      • Voorbeeld: unieke woorden in een document vinden
Gegevenstypen en uitzonderingen in Java

List vs Set

  • Wanneer gebruik je een List
    • Behoudt volgorde en staat duplicaten toe
    • Beter bij toegang op positie
    • Beter bij toevoegen/verwijderen op index
    • Goed als volgorde belangrijk is
      • Bijv.: stappen van een reeks of nummers in een afspeellijst
Gegevenstypen en uitzonderingen in Java

Set-implementatie

  • Veel Set-implementaties
    • HashSet is populair
  • HashSet
    • Een ongeordende zak met objecten
    • Sneller dan andere Set-varianten voor invoegen, verwijderen en zoeken
    • Gebruikt meestal meer geheugen dan andere Set-varianten
    • Staat één null toe

HashSet is een ongeordende zak met objecten en staat één null toe

Gegevenstypen en uitzonderingen in Java

HashSet maken

  • Gebruik een generieke constructor om een HashSet te maken
    HashSet<String> set = new HashSet<String>();
    
  • HashSet staat in het pakket java.util
    • Vereist een import
    • import java.util.HashSet
Gegevenstypen en uitzonderingen in Java

HashSet-methoden

  • Gebruik .add() en .remove() om objecten toe te voegen/verwijderen
  • Vervang door .remove() en daarna .add()
  • Gebruik .contains() om te checken of een object bestaat
  • Duplicaten worden genegeerd
  • null toegestaan
  • Geen gegarandeerde volgorde
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]
Gegevenstypen en uitzonderingen in Java

Queue-interface

  • Queue verwerkt objecten in first in, first out (FIFO)
    • Eerste toegevoegd is eerste verwijderd
    • Zoals een rij bij een loket
    • Heeft een head en tail

Afbeelding van een queue met head (start) en tail (einde) aangegeven

  • Meerdere implementaties van Queue
    • Vergelijkbaar gedrag en operaties
Gegevenstypen en uitzonderingen in Java

ArrayBlockingQueue

  • Populaire Queue-implementatie
    • Onder water een array
  • Let op: ArrayBlockingQueue staat in java.util.concurrent
    • Niet in java.util
Gegevenstypen en uitzonderingen in Java

ArrayBlockingQueue maken

  • Gebruik een generieke constructor om een ArrayBlockingQueue te maken
    • Heeft een capaciteit (limiet) meegegeven in de constructor
import java.util.concurrent;  // Bovenaan de class

// Nieuwe queue die 4 Strings kan opslaan
ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(4);
Gegevenstypen en uitzonderingen in Java

ArrayBlockingQueue-methoden

  • Gebruik .add(object) of .offer(object) om aan de tail toe te voegen
    • .add(object) gooit een exceptie bij volle Queue
    • .offer(object) negeert het object bij volle Queue
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]
Gegevenstypen en uitzonderingen in Java

ArrayBlockingQueue-methoden

  • Gebruik .remove() of .poll() om van de head te verwijderen
    • .remove() gooit een exceptie als de Queue leeg is
    • .poll() geeft null terug als de Queue leeg is
  • null niet toegestaan
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
Gegevenstypen en uitzonderingen in Java

Laten we oefenen!

Gegevenstypen en uitzonderingen in Java

Preparing Video For Download...