Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Struttura Dati Deque in Java | Strutture Dati Avanzate in Java
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Strutture Dati Java

bookStruttura 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

Main.java

copy
1
Deque<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

Main.java

copy
123456789101112131415
package 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

Main.java

copy
1234567891011121314151617
package 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

Main.java

copy
123456789101112131415161718
package 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

Main.java

copy
123456789101112131415
package 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 restituisce true. Restituisce false se l'aggiunta non è possibile;
  • offerLast(E e): aggiunge un elemento alla fine del deque, se possibile, e restituisce true. Restituisce false se l'aggiunta non è possibile;
  • push(E e): aggiunge un elemento all'inizio del deque, simile a addFirst(). Nota che push() è anche un metodo dello stack nella classe Deque.

Metodi per rimuovere un elemento dal deque:

  • pollFirst(): rimuove e restituisce il primo elemento del deque. Restituisce null se il deque è vuoto;
  • pollLast(): rimuove e restituisce l'ultimo elemento del deque. Restituisce null se il deque è vuoto;
  • pop(): rimuove e restituisce il primo elemento del deque, simile a removeFirst().

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?

question mark

Cosa significa "Deque"?

Select the correct answer

question mark

Quale interfaccia in Java rappresenta una Deque?

Select the correct answer

question mark

Qual è lo scopo del metodo addFirst() in una Deque?

Select the correct answer

question mark

Quale metodo viene utilizzato per recuperare, ma non rimuovere, l'ultimo elemento di una Deque?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 2

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

bookStruttura 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

Main.java

copy
1
Deque<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

Main.java

copy
123456789101112131415
package 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

Main.java

copy
1234567891011121314151617
package 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

Main.java

copy
123456789101112131415161718
package 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

Main.java

copy
123456789101112131415
package 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 restituisce true. Restituisce false se l'aggiunta non è possibile;
  • offerLast(E e): aggiunge un elemento alla fine del deque, se possibile, e restituisce true. Restituisce false se l'aggiunta non è possibile;
  • push(E e): aggiunge un elemento all'inizio del deque, simile a addFirst(). Nota che push() è anche un metodo dello stack nella classe Deque.

Metodi per rimuovere un elemento dal deque:

  • pollFirst(): rimuove e restituisce il primo elemento del deque. Restituisce null se il deque è vuoto;
  • pollLast(): rimuove e restituisce l'ultimo elemento del deque. Restituisce null se il deque è vuoto;
  • pop(): rimuove e restituisce il primo elemento del deque, simile a removeFirst().

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?

question mark

Cosa significa "Deque"?

Select the correct answer

question mark

Quale interfaccia in Java rappresenta una Deque?

Select the correct answer

question mark

Qual è lo scopo del metodo addFirst() in una Deque?

Select the correct answer

question mark

Quale metodo viene utilizzato per recuperare, ma non rimuovere, l'ultimo elemento di una Deque?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 2
some-alt