Struttura Dati Deque in Java
Coda a Doppia Estremità
Deque, ovvero coda a doppia estremità, consente di gestire le code sia dalla parte anteriore che da quella posteriore.
L'interfaccia Deque estende l'interfaccia Queue, quindi una classe come LinkedList implementa anche questa interfaccia.
Pertanto, si utilizzerà nuovamente LinkedList, ma questa volta con una nuova interfaccia.
Dichiarare un oggetto di tipo Deque non differisce da Queue:
Main.java
1Deque<T> deque = new LinkedList<>();
La differenza principale emerge quando si analizzano i metodi di questa interfaccia.
Poiché un Deque è una coda a doppia estremità, ovvero consente di operare sugli elementi sia all'inizio che alla fine della coda, i suoi metodi sono adattati a questa caratteristica.
Metodi
Alcuni metodi chiave dell'interfaccia Deque sono:
addFirst(element): aggiunge un elemento all'inizio del deque;addLast(element): aggiunge un elemento alla fine del deque.
È evidente che in un deque esistano metodi per aggiungere sia all'inizio che alla fine. I nomi di questi metodi sono autoesplicativi. Vediamo questi metodi nel codice:
Main.java
123456789101112131415package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.addFirst("One"); deque.addLast("Two"); System.out.println("Deque: " + deque); deque.addFirst("Zero"); System.out.println("Deque after the `addFirst()` method: " + deque); } }
Come puoi vedere, dopo aver utilizzato il metodo addFirst(), l'elemento è stato aggiunto all'inizio del deque. Questo lo distingue dal metodo addLast().
Deque dispone anche di un metodo add() standard, che funziona allo stesso modo del metodo addLast(). Pertanto, la scelta del metodo da utilizzare dipende esclusivamente da te.
Metodi di rimozione
Se esistono metodi per aggiungere elementi all'inizio e alla fine, devono esserci anche metodi per rimuovere dall'inizio e dalla fine del deque.
removeFirst(): rimuove e restituisce l'elemento all'inizio del deque;removeLast(): rimuove e restituisce l'elemento alla fine del deque.
I metodi addFirst() e addLast() eseguono la rimozione degli elementi dall'inizio e dalla fine del deque.
Vediamo un esempio di utilizzo nel codice:
Main.java
1234567891011121314151617package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.add("One"); deque.add("Second"); deque.add("Third"); System.out.println("Deque: " + deque); deque.removeFirst(); deque.removeLast(); System.out.println("Deque after the removal methods method: " + deque); } }
Come puoi vedere, abbiamo rimosso il primo e l'ultimo elemento dal deque, lasciando solo il secondo elemento.
È semplice e comodo, e i nomi dei metodi sono autoesplicativi.
Metodi di Recupero
Successivamente, passiamo ai metodi per accedere agli elementi in un deque.
getFirst(): recupera, ma non rimuove, l'elemento all'inizio del deque;getLast(): recupera, ma non rimuove, l'elemento alla fine del deque.
Questo consente di accedere al primo e all'ultimo elemento in una coda a doppia estremità.
Ora, vediamo un esempio in codice:
Main.java
123456789101112131415161718package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.add("One"); deque.add("Second"); deque.add("Third"); System.out.println("Deque: " + deque); String first = deque.getFirst(); String last = deque.getLast(); System.out.println("The first element in the deque: " + first); System.out.println("The last element in the deque: " + last); } }
Utilizzando i metodi getFirst() e getLast(), sono stati recuperati il primo e l'ultimo elemento dalla deque e assegnati a nuove variabili create.
Nell'interfaccia Deque, sono presenti anche i metodi peekFirst() e peekLast(), che risolvono il problema del lancio di un'eccezione. Invece di lanciare un'eccezione e interrompere il programma, restituiscono null se la coda è vuota.
Ecco un esempio:
Main.java
123456789101112131415package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); System.out.println("Deque: " + deque); String first = deque.peekFirst(); System.out.println("The first element in the deque: " + first); String last = deque.getLast(); System.out.println("The last element in the deque: " + last); } }
Da questo esempio, risulta evidente che è molto meglio utilizzare i metodi peekFirst() e peekLast() invece di getFirst() e getLast(), poiché non interrompono il programma in caso di errore.
Tuttavia, non dimenticare la NullPointerException! Questa eccezione può causare numerosi problemi nel programma.
Esistono anche metodi alternativi equivalenti per i metodi addFirst(), addLast(), removeFirst() e removeLast(). Non ci soffermeremo a lungo su di essi, poiché hai già compreso come funzionano questi metodi, ma ecco l'elenco:
Metodi alternativi
Metodi per aggiungere un elemento al deque:
offerFirst(E e): aggiunge un elemento all'inizio del deque, se possibile, e restituiscetrue. Restituiscefalsese l'aggiunta non è possibile;offerLast(E e): aggiunge un elemento alla fine del deque, se possibile, e restituiscetrue. Restituiscefalsese l'aggiunta non è possibile;push(E e): aggiunge un elemento all'inizio del deque, simile aaddFirst(). Nota chepush()è anche un metodo dello stack nella classeDeque.
Metodi per rimuovere un elemento dal deque:
pollFirst(): rimuove e restituisce il primo elemento del deque. Restituiscenullse il deque è vuoto;pollLast(): rimuove e restituisce l'ultimo elemento del deque. Restituiscenullse il deque è vuoto;pop(): rimuove e restituisce il primo elemento del deque, simile aremoveFirst().
La scelta dipende dai requisiti del programma. È sempre possibile risolvere tutto con un array regolare, ma sarebbe piuttosto impegnativo e non ottimizzato. Ecco perché esistono così tante strutture dati diverse—per rendere più conveniente la scrittura di vari programmi.
1. Cosa significa "Deque"?
2. Quale interfaccia in Java rappresenta una Deque?
3. Qual è lo scopo del metodo addFirst() in una Deque?
4. Quale metodo viene utilizzato per recuperare, ma non rimuovere, l'ultimo elemento di una Deque?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Fantastico!
Completion tasso migliorato a 4
Struttura Dati Deque in Java
Scorri per mostrare il menu
Coda a Doppia Estremità
Deque, ovvero coda a doppia estremità, consente di gestire le code sia dalla parte anteriore che da quella posteriore.
L'interfaccia Deque estende l'interfaccia Queue, quindi una classe come LinkedList implementa anche questa interfaccia.
Pertanto, si utilizzerà nuovamente LinkedList, ma questa volta con una nuova interfaccia.
Dichiarare un oggetto di tipo Deque non differisce da Queue:
Main.java
1Deque<T> deque = new LinkedList<>();
La differenza principale emerge quando si analizzano i metodi di questa interfaccia.
Poiché un Deque è una coda a doppia estremità, ovvero consente di operare sugli elementi sia all'inizio che alla fine della coda, i suoi metodi sono adattati a questa caratteristica.
Metodi
Alcuni metodi chiave dell'interfaccia Deque sono:
addFirst(element): aggiunge un elemento all'inizio del deque;addLast(element): aggiunge un elemento alla fine del deque.
È evidente che in un deque esistano metodi per aggiungere sia all'inizio che alla fine. I nomi di questi metodi sono autoesplicativi. Vediamo questi metodi nel codice:
Main.java
123456789101112131415package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.addFirst("One"); deque.addLast("Two"); System.out.println("Deque: " + deque); deque.addFirst("Zero"); System.out.println("Deque after the `addFirst()` method: " + deque); } }
Come puoi vedere, dopo aver utilizzato il metodo addFirst(), l'elemento è stato aggiunto all'inizio del deque. Questo lo distingue dal metodo addLast().
Deque dispone anche di un metodo add() standard, che funziona allo stesso modo del metodo addLast(). Pertanto, la scelta del metodo da utilizzare dipende esclusivamente da te.
Metodi di rimozione
Se esistono metodi per aggiungere elementi all'inizio e alla fine, devono esserci anche metodi per rimuovere dall'inizio e dalla fine del deque.
removeFirst(): rimuove e restituisce l'elemento all'inizio del deque;removeLast(): rimuove e restituisce l'elemento alla fine del deque.
I metodi addFirst() e addLast() eseguono la rimozione degli elementi dall'inizio e dalla fine del deque.
Vediamo un esempio di utilizzo nel codice:
Main.java
1234567891011121314151617package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.add("One"); deque.add("Second"); deque.add("Third"); System.out.println("Deque: " + deque); deque.removeFirst(); deque.removeLast(); System.out.println("Deque after the removal methods method: " + deque); } }
Come puoi vedere, abbiamo rimosso il primo e l'ultimo elemento dal deque, lasciando solo il secondo elemento.
È semplice e comodo, e i nomi dei metodi sono autoesplicativi.
Metodi di Recupero
Successivamente, passiamo ai metodi per accedere agli elementi in un deque.
getFirst(): recupera, ma non rimuove, l'elemento all'inizio del deque;getLast(): recupera, ma non rimuove, l'elemento alla fine del deque.
Questo consente di accedere al primo e all'ultimo elemento in una coda a doppia estremità.
Ora, vediamo un esempio in codice:
Main.java
123456789101112131415161718package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.add("One"); deque.add("Second"); deque.add("Third"); System.out.println("Deque: " + deque); String first = deque.getFirst(); String last = deque.getLast(); System.out.println("The first element in the deque: " + first); System.out.println("The last element in the deque: " + last); } }
Utilizzando i metodi getFirst() e getLast(), sono stati recuperati il primo e l'ultimo elemento dalla deque e assegnati a nuove variabili create.
Nell'interfaccia Deque, sono presenti anche i metodi peekFirst() e peekLast(), che risolvono il problema del lancio di un'eccezione. Invece di lanciare un'eccezione e interrompere il programma, restituiscono null se la coda è vuota.
Ecco un esempio:
Main.java
123456789101112131415package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); System.out.println("Deque: " + deque); String first = deque.peekFirst(); System.out.println("The first element in the deque: " + first); String last = deque.getLast(); System.out.println("The last element in the deque: " + last); } }
Da questo esempio, risulta evidente che è molto meglio utilizzare i metodi peekFirst() e peekLast() invece di getFirst() e getLast(), poiché non interrompono il programma in caso di errore.
Tuttavia, non dimenticare la NullPointerException! Questa eccezione può causare numerosi problemi nel programma.
Esistono anche metodi alternativi equivalenti per i metodi addFirst(), addLast(), removeFirst() e removeLast(). Non ci soffermeremo a lungo su di essi, poiché hai già compreso come funzionano questi metodi, ma ecco l'elenco:
Metodi alternativi
Metodi per aggiungere un elemento al deque:
offerFirst(E e): aggiunge un elemento all'inizio del deque, se possibile, e restituiscetrue. Restituiscefalsese l'aggiunta non è possibile;offerLast(E e): aggiunge un elemento alla fine del deque, se possibile, e restituiscetrue. Restituiscefalsese l'aggiunta non è possibile;push(E e): aggiunge un elemento all'inizio del deque, simile aaddFirst(). Nota chepush()è anche un metodo dello stack nella classeDeque.
Metodi per rimuovere un elemento dal deque:
pollFirst(): rimuove e restituisce il primo elemento del deque. Restituiscenullse il deque è vuoto;pollLast(): rimuove e restituisce l'ultimo elemento del deque. Restituiscenullse il deque è vuoto;pop(): rimuove e restituisce il primo elemento del deque, simile aremoveFirst().
La scelta dipende dai requisiti del programma. È sempre possibile risolvere tutto con un array regolare, ma sarebbe piuttosto impegnativo e non ottimizzato. Ecco perché esistono così tante strutture dati diverse—per rendere più conveniente la scrittura di vari programmi.
1. Cosa significa "Deque"?
2. Quale interfaccia in Java rappresenta una Deque?
3. Qual è lo scopo del metodo addFirst() in una Deque?
4. Quale metodo viene utilizzato per recuperare, ma non rimuovere, l'ultimo elemento di una Deque?
Grazie per i tuoi commenti!