La classe Queue di Collection – Lezione 36 di Java Avanzato

Le Queue rappresentano una collezione progettata per contenere gli elementi prima di potere essere utilizzati. In genere, le cose vengono usate nella modalità FIFO (first-in-first-out), il primo elemento inserito sarà il primo ad uscire. In una coda FIFO, tutti i nuovi elementi sono inseriti in coda della coda. Altri tipi di code possono utilizzare regole di posizionamento differenti, ad esempio le PriorityQueue che in cima alla coda avranno quei elementi con una maggior priorità di essere estratti. Anche per le PriorityQueue, così come per i TreeSet ospitano oggetti che implementano l’interfaccia Comparable, oppure bisogna passargli il metodo Comparator come argomento.

Graficamente la classe Queue è così definita (cliccare sull’immagine per ingrandirla):

La classe Queue di Collection

Una PriorityQueue implementata come uno Heap

Gli elementi di una coda vengono inseriti in una struttura dati tipo Heap. Si tratta di un albero binario dove le operazioni add e remove fanno in modo che l’elemento più piccolo viene messo nella radice e così via. In questo modo le estrazioni degli elementi dalla coda risultano più efficienti e non bisogna riordinare tutti gli elementi (Heap Sorting).
Un tipico esempio delle PriorityQueue è quello degli schedulatori, per gestire in automatico le priorità dei job inseriti vengono inseriti nella PriorityQueue in base alla loro priorità. Più un job si trova vicino alla coda, più la sua priorità è bassa.

In PriorityQueue troviamo due costruttori:

  •   PriorityQueue(initialCapacity: int)

    Questo costruttore consente di creare una PriorityQueue con una determinata capacità iniziale ed offre un ordinamento naturale con l’interfaccia Comparable;

  •   PriorityQueue(initialCapacity: int, c: Comparator)

    Consente di creare PriorityQueue con una capacità iniziale di elementi e con un determinato comparatore.

La classe Queue offre un’importante soluzione alla sincronizzazione tra thread fornendo l’interfaccia BlockingQueue. Approfondiremo il discorso su questa classe quando tratteremo i thread (lezione 42)

Indice Lezione PrecedenteLezione Successiva

Pubblicato in Collezioni, Guide, Java, Programmazione Taggato con: , , , , ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*