deque java deque implementation
Questo tutorial fornisce una spiegazione dettagliata di Deque o 'coda doppia' in Java. Imparerai a conoscere l'interfaccia Deque, i metodi API, l'implementazione, ecc:
La Deque o 'coda doppia' in Java è una struttura di dati in cui possiamo inserire o eliminare elementi da entrambe le estremità. Il deque è un'interfaccia in Java che appartiene al pacchetto java.util e implementa l'interfaccia java.queue.
Possiamo implementare deque come struttura stack (Last In, First Out) o come coda (first-in-first-out). Deque è più veloce di Stack e / o LinkedList. Deque è pronunciato come 'mazzo' come nel 'mazzo di carte'.
=> Controlla qui per vedere qui i tutorial di formazione su Java dalla A alla Z.
Cosa imparerai:
A proposito di Java
Una tipica collezione di deque apparirà come mostrato di seguito:
programmi java di base richiesti nelle interviste
Deque viene utilizzato principalmente per implementare strutture di dati stack, queue o list. Può anche essere utilizzato per implementare code di priorità. Le funzionalità di annullamento o cronologia per lo più presenti nei browser web possono essere implementate utilizzando deques.
Interfaccia Java Deque
Il diagramma seguente mostra la gerarchia per la coda a doppia estremità o la deque. Come mostrato nel diagramma seguente, l'interfaccia Deque si estende all'interfaccia Queue che a sua volta estende l'interfaccia Collection.
Per utilizzare un'interfaccia deque nel nostro programma, dobbiamo importare il pacchetto che contiene la funzionalità deque utilizzando un'istruzione import come mostrato di seguito.
import java.util.deque;
o
import java.util.*;
Poiché deque è un'interfaccia, abbiamo bisogno di classi concrete per implementare la funzionalità dell'interfaccia deque.
Le due classi seguenti implementano l'interfaccia deque.
- ArrayDeque
- Lista collegata
Quindi possiamo creare oggetti deque usando queste due classi come mostrato di seguito:
Deque numdeque = new ArrayDeque (); Deque strDeque = new LinkedList ();
Pertanto, una volta che gli oggetti deque di cui sopra sono stati creati con successo, possono utilizzare la funzionalità dell'interfaccia deque.
Di seguito sono riportati alcuni punti importanti da notare su deque:
- L'interfaccia Deque supporta array ridimensionabili che possono crescere secondo necessità.
- I valori predefiniti di matrice non consentono l'uso di valori Null.
- Deque non supporta l'accesso simultaneo da più di un thread.
- Deque non è thread-safe a meno che non venga fornita una sincronizzazione esterna.
ArrayDeque in Java
ArrayDeque appartiene al pacchetto java.util. Implementa l'interfaccia deque. Internamente, la classe ArrayDeque fa uso di una matrice ridimensionabile dinamicamente che cresce all'aumentare del numero di elementi.
Il diagramma seguente mostra la gerarchia per la classe ArrayDeque:
Come mostrato nel diagramma, la classe ArrayDeque eredita la classe AbstractCollection e implementa l'interfaccia Deque.
come eseguire un file jar in Windows
Possiamo creare un oggetto deque usando la classe ArrayDeque come mostrato di seguito:
Deque deque_obj = new ArrayDeque ();
ed esempio
Il seguente programma Java mostra un semplice esempio per comprendere meglio il deque. Qui abbiamo usato la classe ArrayDeque per istanziare l'interfaccia deque. Abbiamo appena aggiunto alcuni elementi all'oggetto deque e poi li abbiamo stampati usando un ciclo forEach.
import java.util.*; public class Main { public static void main(String[] args) { //Creat a Deque and add elements Deque cities_deque = new ArrayDeque(); cities_deque.add('Delhi'); cities_deque.add('Mumbai'); cities_deque.add('Bangaluru'); System.out.println('Deque Contents:'); //Traverse the Deque for (String str : cities_deque) { System.out.print(str + ' '); } } }
Produzione:
L'API E I METODI Java
Poiché l'interfaccia deque implementa un'interfaccia della coda, supporta tutti i metodi dell'interfaccia della coda. Inoltre, l'interfaccia deque fornisce i seguenti metodi che possono essere utilizzati per eseguire varie operazioni con l'oggetto deque.
Riassumiamo questi metodi nella tabella seguente.
Metodo | Metodo Prototipo | Descrizione |
---|---|---|
getFirst | E getFirst () | Recupera il primo elemento della deque senza rimuoverlo. |
Inserisci | booleano add (E e) | Aggiunge un dato elemento e nel deque (in coda) senza violare le limitazioni di capacità e restituisce true in caso di successo. Genera IllegalStateException se non c'è spazio disponibile nel deque. |
addFirst | void addFirst (E e) | Aggiunge un dato elemento e all'inizio della coda senza violare le limitazioni di capacità. |
addLast | void addLast (E e) | Aggiunge l'elemento e all'ultimo della deque senza violare le limitazioni di capacità. |
contiene | booleano contiene (Oggetto o) | Controlla se la deque contiene un dato elemento o. Restituisce vero se sì. |
descendingIterator | Iteratore discendente Iteratore () | Questo metodo restituisce l'iteratore in ordine inverso per deque. |
elemento | E elemento () | Restituisce il primo elemento o capo del deque. Notare che non elimina l'elemento. |
getLast | E getLast () | Ottiene l'ultimo elemento del deque senza rimuoverlo. |
iteratore | Iteratore iteratore () | Restituisce un iteratore standard sugli elementi del deque. |
offrire | offerta booleana (E e) | Aggiunge un dato elemento e alla deque (come coda) senza violare le limitazioni di capacità. Restituisce vero in caso di successo e falso in caso di fallimento. |
offerFirst | boolean offerFirst (E e) | Inserire l'elemento dato e nella parte anteriore del deque senza violare le limitazioni di capacità. |
offerLast | boolean offerLast (E e) | Inserire l'elemento e dato alla fine della deque senza violare i limiti di capacità. |
sbirciare | E sbircia () | Restituisce l'intestazione della deque (primo elemento) o null se una coda è vuota. ** non cancella la testa |
peekFirst | E peekFirst () | Restituisce il primo elemento nella deque senza eliminarlo. Restituisce null se deque è vuoto. |
peekLast | E peekLast () | Recupera l'ultimo elemento nel deque senza rimuoverlo. Restituisce null se deque è vuoto. |
sondaggio | E sondaggio () | Elimina e restituisce la testata del deque. Restituisce null se deque è vuoto. |
pollFirst | E pollFirst () | Restituisce e rimuove il primo elemento del deque. Restituisce null se deque è vuoto. |
pollLast | E pollLast() | Restituisce e rimuove l'ultimo elemento del deque. Restituisce null se deque è vuoto. |
pop | E pop () | Estrai l'elemento dallo stack rappresentato usando deque. |
spingere | void push (E e) | Spingere un dato elemento e nella pila rappresentata usando deque senza violare le limitazioni di capacità. Restituisce true in caso di successo o IllegalStateException se non è disponibile spazio su deque. |
rimuovere | E rimuovi () | Rimuovere e restituire la testa del deque. |
rimuovere | booleano remove (Object o) | Rimuove la prima occorrenza dell'elemento dato o dal deque. |
removeFirst | E removeFirst () | Rimuovere e restituire il primo elemento del deque. |
removeFirstOccurrence | booleano removeFirstOccurrence (Object o) | Rimuove la prima occorrenza dell'elemento specificato o dal deque. |
removeLast | E removeLast () | Recupera ed elimina l'ultimo elemento nel deque. |
removeLastOccurrence | booleano removeLastOccurrence (Object o) | Elimina l'ultima occorrenza di un dato elemento o dal deque. |
taglia | int size () | Restituisce la dimensione o il numero di elementi nella deque. |
E implementazione in Java
Implementiamo ora un programma Java per dimostrare alcuni dei principali metodi di deque discussi sopra.
In questo programma, usiamo un deque di tipo String e poi aggiungiamo elementi a questo deque usando vari metodi come add, addFirst, addLast, push, offer, offerFirst, ecc. Quindi visualizziamo il deque. Successivamente, definiamo gli iteratori standard e inverso per il deque e attraversiamo il deque per stampare gli elementi.
Usiamo anche altri metodi come contiene, pop, push, peek, poll, remove, ecc.
import java.util.*; public class Main { public static void main(String[] args) { //Declare Deque object Deque deque = new LinkedList(); // add elements to the queue using various methods deque.add('One'); //add () deque.addFirst('Two'); //addFirst () deque.addLast('Three'); //addLast () deque.push('Four'); //push () deque.offer('Five'); //offer () deque.offerFirst('Six'); //offerFirst () deque.offerLast('Seven'); //offerLast () System.out.println('Initial Deque:'); System.out.print(deque + ' '); // Iterate using standard iterator System.out.println('
Deque contents using Standard Iterator:'); Iterator iterator = deque.iterator(); while (iterator.hasNext()) System.out.print(' ' + iterator.next()); // Iterate using Reverse order iterator Iterator reverse = deque.descendingIterator(); System.out.println('
Deque contents using Reverse Iterator:'); while (reverse.hasNext()) System.out.print(' ' + reverse.next()); // Peek () method System.out.println('
Deque Peek:' + deque.peek()); System.out.println('
Deque,After peek:' + deque); // Pop () method System.out.println('
Deque Pop:' + deque.pop()); System.out.println('
Deque,After pop:' + deque); // contains () method System.out.println('
Deque Contains Three: ' + deque.contains('Three')); deque.removeFirst(); //removeFirst () deque.removeLast(); //removeLast () System.out.println('
Deque, after removing ' + 'first and last elements: ' + deque); } }
Produzione:
Domande frequenti
D # 1) Deque è Java thread-safe?
Risposta: ArrayDeque non è thread-safe. Ma l'interfaccia BlockingDeque nella classe java.util.concurrent rappresenta il deque. Questo deque è thread-safe.
Q # 2) Perché Deque è più veloce dello stack?
Risposta: L'interfaccia ArrayDeque che implementa l'interfaccia deque è efficiente in termini di memoria poiché non è necessario tenere traccia dei nodi precedenti o successivi. Inoltre, è un'implementazione ridimensionabile. Quindi deque è più veloce dello stack.
Q # 3) Deque è uno stack?
Risposta: Un deque è una coda a doppia estremità. Permette il comportamento LIFO e quindi può essere implementato come uno stack sebbene non sia uno stack.
Q # 4) Dove viene utilizzato Deque?
Risposta: Un deque viene utilizzato principalmente per implementare funzionalità come undo e history.
D # 5) Deque è circolare?
Risposta: Sì, Deque è circolare.
Conclusione
Questo completa il nostro tutorial sull'interfaccia Deque in Java. L'interfaccia deque è implementata da una struttura dati deque che è una raccolta che può inserire ed eliminare elementi da entrambe le estremità.
Le due classi, ovvero ArrayDeque e LinkedList, implementano l'interfaccia deque. Possiamo usare queste classi per implementare la funzionalità dell'interfaccia deque.
=> Visita qui per l'esclusiva serie di tutorial di formazione Java.
Lettura consigliata
- Double Ended Queue (Deque) in C ++ con esempi
- Java Queue - Metodi di coda, implementazione di code con esempi
- Tutorial Java Priority Queue - Implementazione ed esempi
- Priorità Struttura Dati Coda In C ++ Con Illustrazione
- Struttura dei dati della coda in C ++ con illustrazione
- Struttura dei dati della coda circolare C ++: implementazione e applicazioni
- Tutorial JAVA per principianti: oltre 100 tutorial video Java pratici
- Coda prioritaria in AWL