Mängder, köer

Datatyper och undantag i Java

Jim White

Java Developer

Set-gränssnittet

  • Set är också en typ av Collection
    • Tillåter inte dubbletter
      • Garanterar att varje element är unikt
    • Set-objekt är i allmänhet oordnade (har därför inget index)
  • List liknar en pillerask för objekt – varje objekt har en bestämd plats i asken
  • Set liknar en säck med objekt; objekten ligger i slumpmässig ordning

Listor liknar pillerorganiserare där objekt lagras på ett index på en specifik plats

Mängder liknar säckar som håller objekt slumpmässigt och oordnat

1 Bilder från Wikimedia Commons
Datatyper och undantag i Java

List vs. Set

  • När du ska använda ett Set
    • Garanterar att elementen är unika
    • Gör uppslagningar snabbare
      • Kontrollera om ett objekt finns i ett Set
    • Mer minneseffektivt ju större samlingen växer
    • Passar bra för medlemskapstestning i cachar
      • Exempel: hitta unika ord i ett dokument
Datatyper och undantag i Java

List vs. Set

  • När du ska använda en List
    • Bevarar elementordningen och tillåter dubbletter
    • Bättre prestanda vid åtkomst av element via position
    • Bättre prestanda vid tillägg/borttagning av element via index
    • Passar bra när ordningen på elementen spelar roll
      • Ex: hantera stegen i en sekvens eller låtar i en spellista
Datatyper och undantag i Java

Set-implementation

  • Många implementationer av Set
    • HashSet är en populär implementation
  • HashSet
    • En oordnad samling av objekt
    • Snabbare än andra Set-implementationer för insättning, borttagning och sökning
    • Använder generellt mer minne än andra Set-implementationer
    • Tillåter ett enda null-värde

HashSet är oordnade samlingar av objekt som tillåter ett null-värde

Datatyper och undantag i Java

Skapa ett HashSet

  • Skapa ett HashSet med en generisk parametriserad konstruktor
    HashSet<String> set = new HashSet<String>();
    
  • HashSet finns i paketet java.util
    • Kräver en import
    • import java.util.HashSet
Datatyper och undantag i Java

HashSet-metoder

  • Använd .add() och .remove() för att lägga till och ta bort objekt
  • Använd .remove() följt av .add() för att ersätta ett objekt
  • Använd .contains() för att kontrollera om ett objekt redan finns
  • Dubbletter ignoreras
  • Tillåter null
  • Ordning garanteras inte
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]
Datatyper och undantag i Java

Queue-gränssnittet

  • Datastrukturen Queue behandlar objekt i FIFO-ordning (först in, först ut)
    • Det objekt som lades till först tas bort först
    • Liknar en kö vid en biljettkassa
    • Har ett huvud- och ett slutelement

Bild av en kö där huvud (start) och slutet (slut) är markerade

  • Flera implementationer av Queue
    • Liknande beteende och operationer
Datatyper och undantag i Java

ArrayBlockingQueue

  • Populär implementation av Queue
    • Använder en array internt
  • Obs: ArrayBlockingQueue finns i paketet java.util.concurrent
    • Inte i paketet java.util
Datatyper och undantag i Java

Skapa en ArrayBlockingQueue

  • Skapa en ArrayBlockingQueue med en generisk parametriserad konstruktor
    • Har en kapacitet eller objektgräns som anges i konstruktorn
import java.util.concurrent;  // At the top of the class

// Create new queue that can store 4 Strings
ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(4);
Datatyper och undantag i Java

ArrayBlockingQueue-metoder

  • Använd .add(object) eller .offer(object) för att lägga till i slutet
    • .add(object) kastar ett undantag när Queue är full
    • .offer(object) ignorerar det nya objektet när kön är full
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]
Datatyper och undantag i Java

ArrayBlockingQueue-metoder

  • Använd .remove() eller .poll() för att ta bort från huvudet
    • .remove() kastar ett undantag när Queue är tom
    • .poll() returnerar null när Queue är tom
  • Tillåter inte 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
Datatyper och undantag i Java

Nu kör vi en övning!

Datatyper och undantag i Java

Preparing Video For Download...