Set, Queue

Tipi di dati ed eccezioni in Java

Jim White

Java Developer

Interfaccia Set

  • Set è anche un tipo di Collection
    • Non consente duplicati
      • Garantisce unicità degli elementi
    • In genere i Set sono non ordinati (quindi senza indice)
  • Le List sono come un portapillole: ogni oggetto in uno scomparto preciso
  • I Set sono come un sacco: oggetti tenuti alla rinfusa

Le liste sono come portapillole con oggetti in una posizione indicizzata

I set sono come sacchi con oggetti alla rinfusa e non ordinati

1 Immagini per gentile concessione di Wikimedia Commons
Tipi di dati ed eccezioni in Java

List vs Set

  • Quando usare un Set
    • Garantisce l'unicità degli elementi
    • Più veloce nelle ricerche
      • Verificare se un oggetto è nel Set
    • Più efficiente in memoria all'aumentare della collezione
    • Utile per test di appartenenza in cache
      • Es.: trovare parole uniche in un documento
Tipi di dati ed eccezioni in Java

List vs Set

  • Quando usare una List
    • Preserva l'ordine e consente duplicati
    • Migliore per accesso per posizione
    • Migliore per aggiunte/rimozioni per indice
    • Utile quando l'ordine conta
      • Es.: gestire passi di una sequenza o brani di una playlist
Tipi di dati ed eccezioni in Java

Implementazioni di Set

  • Molte implementazioni di Set
    • HashSet è molto usato
  • HashSet
    • Un sacco non ordinato di oggetti
    • Più veloce di altri Set per inserimenti, rimozioni e ricerche
    • In genere usa più memoria di altri Set
    • Consente un solo null

Gli HashSet sono sacchi non ordinati che consentono un solo null

Tipi di dati ed eccezioni in Java

Creazione di HashSet

  • Usa il costruttore generico parametrizzato per creare un HashSet
    HashSet<String> set = new HashSet<String>();
    
  • HashSet si trova nel package java.util
    • Richiede un import
    • import java.util.HashSet
Tipi di dati ed eccezioni in Java

Metodi di HashSet

  • Usa .add() e .remove() per aggiungere/rimuovere oggetti
  • Usa .remove() e poi .add() per sostituire un oggetto
  • Usa .contains() per verificare se esiste già
  • I duplicati vengono ignorati
  • Consente null
  • Ordine non garantito
set.add("France");
set.add("Japan");
set.add("Brazil");
set.add("Egypt");
set.add(null); // null è consentito
set.remove("Brazil");
boolean z =
  set.contains("France"); // z è true
set.add("Japan"); // Ignorato
System.out.println(set);
[null, Japan, Egypt, France]
Tipi di dati ed eccezioni in Java

Interfaccia Queue

  • La struttura Queue processa in ordine FIFO (first in, first out)
    • Il primo inserito è il primo rimosso
    • Come una fila alla biglietteria
    • Ha una testa e una coda

Immagine di una coda con testa (inizio) e coda (fine) indicate

  • Diverse implementazioni di Queue
    • Simili per comportamento e operazioni
Tipi di dati ed eccezioni in Java

ArrayBlockingQueue

  • Implementazione di Queue molto usata
    • Basata su array internamente
  • Attenzione: ArrayBlockingQueue è nel package java.util.concurrent
    • Non in java.util
Tipi di dati ed eccezioni in Java

Creazione di ArrayBlockingQueue

  • Usa il costruttore generico parametrizzato per creare una ArrayBlockingQueue
    • Ha una capacità (limite di elementi) impostata nel costruttore
import java.util.concurrent;  // In cima alla classe

// Crea una coda che può contenere 4 String
ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(4);
Tipi di dati ed eccezioni in Java

Metodi di ArrayBlockingQueue

  • Usa .add(object) o .offer(object) per aggiungere in coda
    • .add(object) lancia un'eccezione se la Queue è piena
    • .offer(object) ignora il nuovo oggetto se è piena
ArrayBlockingQueue<String> queue 
    = new ArrayBlockingQueue<String>(4);
queue.offer("France");
queue.offer("Japan");
queue.offer("Brazil");
queue.offer("Egypt");
queue.offer("China"); // Ignora China

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

System.out.println(queue);
[France, Japan, Brazil, Egypt]
Tipi di dati ed eccezioni in Java

Metodi di ArrayBlockingQueue

  • Usa .remove() o .poll() per rimuovere dalla testa
    • .remove() lancia un'eccezione se la Queue è vuota
    • .poll() restituisce null se è vuota
  • Non consente null
ArrayBlockingQueue<String> queue 
    = new ArrayBlockingQueue<String>(4);
String x = queue.poll(); // x è null
// Genera NoSuchElementException
// String y = queue.remove();

queue.offer("France");
String next = queue.poll();
System.out.println(next);
France
Tipi di dati ed eccezioni in Java

Ayo berlatih!

Tipi di dati ed eccezioni in Java

Preparing Video For Download...