Interfaccia Queue in Java
- L'interfaccia
Queue
estendeCollection
e dichiara il comportamento di una coda, che spesso è una lista first-in, first-out. - Tuttavia, esistono tipi di code in cui l'ordinamento è basato su altri criteri.
- I metodi principali includono
element()
,offer()
,peek()
,poll()
, eremove()
. - L'interfaccia
Deque
estendeQueue
e dichiara il comportamento di una coda a doppia estremità. - I metodi aggiuntivi in
Deque
includonoaddFirst()
,addLast()
,getFirst()
,getLast()
,push()
, epop()
.
L'interfaccia Queue
L'interfaccia Queue
estende Collection
e dichiara il comportamento di una coda, che spesso è una lista first-in, first-out.
Tuttavia, esistono tipi di code in cui l'ordinamento è basato su altri criteri. Queue
è un'interfaccia generica che ha questa dichiarazione:
interface Queue<E> extends Collection<E>
Qui, E
specifica il tipo di oggetti che la coda conterrà. I metodi dichiarati da Queue
sono mostrati nella Tabella seguente:
Metodo | Descrizione |
---|---|
E element() |
Restituisce l'elemento alla testa della coda. L'elemento non viene rimosso. Lancia NoSuchElementException se la coda è vuota. |
boolean offer(E obj) |
Tenta di aggiungere obj alla coda. Restituisce true se obj è stato aggiunto e false altrimenti. |
E peek() |
Restituisce l'elemento alla testa della coda. Restituisce null se la coda è vuota. L'elemento non viene rimosso. |
E poll() |
Restituisce l'elemento alla testa della coda, rimuovendo l'elemento nel processo. Restituisce null se la coda è vuota. |
E remove() |
Rimuove l'elemento alla testa della coda, restituendo l'elemento nel processo. Lancia NoSuchElementException se la coda è vuota. |
Diversi metodi lanciano una ClassCastException
quando un oggetto è incompatibile con gli elementi nella coda. Una NullPointerException
viene lanciata se si tenta di memorizzare un oggetto null
e gli elementi null
non sono consentiti nella coda. Un'IllegalArgumentException
viene lanciata se viene utilizzato un argomento non valido. Un'IllegalStateException
viene lanciata se si tenta di aggiungere un elemento a una coda di lunghezza fissa che è piena. Una NoSuchElementException
viene lanciata se si tenta di rimuovere un elemento da una coda vuota.
Nonostante la sua semplicità, Queue
offre diversi punti di interesse. Primo, gli elementi possono essere rimossi solo dalla testa della coda. Secondo, ci sono due metodi che ottengono e rimuovono elementi: poll()
e remove()
. La differenza tra loro è che poll()
restituisce null
se la coda è vuota, ma remove()
lancia un'eccezione. Terzo, ci sono due metodi, element()
e peek()
, che ottengono ma non rimuovono l'elemento alla testa della coda. Differiscono solo nel fatto che element()
lancia un'eccezione se la coda è vuota, ma peek()
restituisce null
. Infine, si noti che offer()
tenta solo di aggiungere un elemento a una coda. Poiché alcune code hanno una lunghezza fissa e potrebbero essere piene, offer()
può fallire.
L'Interfaccia Deque
L'interfaccia Deque
estende Queue
e dichiara il comportamento di una coda a doppia estremità. In altre parole, gli elementi possono essere aggiunti o rimossi da entrambe le estremità della coda. Analogamente, gli elementi possono essere ottenuti da entrambe le estremità della coda.
Le code a doppia estremità possono funzionare come code standard first-in, first-out o come uno stack, ossia last-in, first-out. Deque
è un'interfaccia generica che ha questa dichiarazione:
interface Deque<E> extends Queue<E>
Qui, E
specifica il tipo di oggetti che la deque conterrà. Oltre ai metodi che eredita da Queue
, Deque
aggiunge quei metodi riassunti nella Tabella seguente:
Metodo | Descrizione |
---|---|
void addFirst(E obj) |
Aggiunge obj alla testa della deque. Lancia un IllegalStateException se una deque con capacità limitata è rimasta senza spazio. |
void addLast(E obj) |
Aggiunge obj alla coda della deque. Lancia un IllegalStateException se una deque con capacità limitata è rimasta senza spazio. |
Iterator<E> descendingIterator() |
Restituisce un iteratore che si muove dalla coda alla testa della deque. In altre parole, restituisce un iteratore inverso. |
E getFirst() |
Restituisce il primo elemento nella deque. L'oggetto non viene rimosso dalla deque. Lancia NoSuchElementException se la deque è vuota. |
E getLast() |
Restituisce l'ultimo elemento nella deque. L'oggetto non viene rimosso dalla deque. Lancia NoSuchElementException se la deque è vuota. |
boolean offerFirst(E obj) |
Tenta di aggiungere obj alla testa della deque. Restituisce true se obj è stato aggiunto e false altrimenti. Pertanto, questo metodo restituisce false quando si tenta di aggiungere obj a una deque piena con capacità limitata. |
boolean offerLast(E obj) |
Tenta di aggiungere obj alla coda della deque. Restituisce true se obj è stato aggiunto e false altrimenti. |
E peekFirst() |
Restituisce l'elemento alla testa della deque. Restituisce null se la deque è vuota. L'oggetto non viene rimosso. |
E peekLast() |
Restituisce l'elemento alla coda della deque. Restituisce null se la deque è vuota. L'oggetto non viene rimosso. |
E pollFirst() |
Restituisce l'elemento alla testa della deque, rimuovendo l'elemento nel processo. Restituisce null se la deque è vuota. |
E pollLast() |
Restituisce l'elemento alla coda della deque, rimuovendo l'elemento nel processo. Restituisce null se la deque è vuota. |
E pop() |
Restituisce l'elemento alla testa della deque, rimuovendolo nel processo. Lancia NoSuchElementException se la deque è vuota. |
void push(E obj) |
Aggiunge obj alla testa della deque. Lancia un IllegalStateException se una deque con capacità limitata è senza spazio. |
E removeFirst() |
Restituisce l'elemento alla testa della deque, rimuovendo l'elemento nel processo. Lancia NoSuchElementException se la deque è vuota. |
boolean removeFirstOccurrence(Object obj) |
Rimuove la prima occorrenza di obj dalla deque. Restituisce true se ha successo e false se la deque non conteneva obj . |
E removeLast() |
Restituisce l'elemento alla coda della deque, rimuovendo l'elemento nel processo. Lancia NoSuchElementException se la deque è vuota. |
boolean removeLastOccurrence(Object obj) |
Rimuove l'ultima occorrenza di obj dalla deque. Restituisce true se ha successo e false se la deque non conteneva obj . |
Diversi metodi lanciano una ClassCastException
quando un oggetto è incompatibile con gli elementi nella deque. Una NullPointerException
viene lanciata se si tenta di memorizzare un oggetto null
e gli elementi null
non sono consentiti nella deque. Una IllegalArgumentException
viene lanciata se viene usato un argomento non valido. Una IllegalStateException
viene lanciata se si tenta di aggiungere un elemento a una deque a lunghezza fissa che è piena. Una NoSuchElementException
viene lanciata se si tenta di rimuovere un elemento da una deque vuota.
Notiamo che Deque
include i metodi push()
e pop()
. Questi metodi abilitano una Deque
a funzionare come uno stack. Inoltre, notiamo il metodo descendingIterator()
. Restituisce un iteratore che restituisce elementi in ordine inverso. In altre parole, restituisce un iteratore che si muove dalla fine della collezione all'inizio. Un'implementazione Deque
può essere con capacità limitata, il che significa che solo un numero limitato di elementi può essere aggiunto alla deque. Quando questo è il caso, un tentativo di aggiungere un elemento alla deque può fallire. Deque
consente di gestire tale fallimento in due modi. Primo, metodi come addFirst()
e addLast()
lanciano una IllegalStateException
se una deque con capacità limitata è piena. Secondo, metodi come offerFirst()
e offerLast()
restituiscono false
se l'elemento non può essere aggiunto.