deque java deque implementation
Αυτό το σεμινάριο παρέχει λεπτομερή επεξήγηση του Deque ή του 'Double-end Queue' στην Java. Θα μάθετε για τη διεπαφή Deque, τις μεθόδους API, την εφαρμογή κ.λπ.
Το Deque ή η 'ουρά διπλού άκρου' στην Java είναι μια δομή δεδομένων στην οποία μπορούμε να εισάγουμε ή να διαγράψουμε στοιχεία και από τα δύο άκρα. Το deque είναι μια διεπαφή στην Java που ανήκει στο πακέτο java.util και εφαρμόζει τη διεπαφή java.queue.
Μπορούμε να εφαρμόσουμε το deque ως δομή στοίβας (Last In, First Out) ή ως ουρά (first-in-first-out). Το Deque είναι ταχύτερο από το Stack και / ή το LinkedList. Το Deque προφέρεται ως 'τράπουλα' όπως στο 'τράπουλα καρτών'.
=> Δείτε εδώ για να δείτε το A-Z Of Java Training Tutorials εδώ.
Τι θα μάθετε:
Σχετικά με την Java
Μια τυπική συλλογή deque θα φαίνεται όπως φαίνεται παρακάτω:
πρόγραμμα γρήγορης ταξινόμησης στο c ++
Το Deque χρησιμοποιείται κυρίως για την υλοποίηση δομών δεδομένων στοίβας, ουράς ή λίστας. Μπορεί επίσης να χρησιμοποιηθεί για την εφαρμογή ουρών προτεραιότητας. Τα χαρακτηριστικά της αναίρεσης ή του ιστορικού που υπάρχουν κυρίως στα προγράμματα περιήγησης ιστού μπορούν να εφαρμοστούν χρησιμοποιώντας deques.
Διεπαφή Java Deque
Το παρακάτω διάγραμμα δείχνει την ιεραρχία για την ουρά ή το deque με δύο άκρα. Όπως φαίνεται στο παρακάτω διάγραμμα, η διεπαφή Deque επεκτείνεται στη διεπαφή ουράς που με τη σειρά της επεκτείνει τη διεπαφή συλλογής.
Για να χρησιμοποιήσουμε μια διασύνδεση deque στο πρόγραμμά μας, πρέπει να εισαγάγουμε το πακέτο που διαθέτει λειτουργικότητα deque χρησιμοποιώντας μια δήλωση εισαγωγής όπως φαίνεται παρακάτω.
import java.util.deque;
ή
import java.util.*;
Καθώς το deque είναι μια διεπαφή, χρειαζόμαστε συγκεκριμένες κλάσεις για να εφαρμόσουμε τη λειτουργικότητα της διασύνδεσης deque.
Οι δύο κατηγορίες παρακάτω, εφαρμόζουν τη διεπαφή deque.
- ArrayDeque
- Συνδεδεμένη λίστα
Ως εκ τούτου, μπορούμε να δημιουργήσουμε αντικείμενα deque χρησιμοποιώντας αυτές τις δύο κατηγορίες όπως φαίνεται παρακάτω:
Deque numdeque = new ArrayDeque (); Deque strDeque = new LinkedList ();
Έτσι, μόλις δημιουργηθούν επιτυχώς τα παραπάνω αντικείμενα deque, μπορούν να χρησιμοποιήσουν τη λειτουργικότητα της διασύνδεσης deque.
Παρακάτω αναφέρονται μερικά σημαντικά σημεία που πρέπει να σημειωθούν σχετικά με το deque:
- Η διασύνδεση Deque υποστηρίζει συστοιχίες με δυνατότητα αλλαγής μεγέθους που μπορούν να αναπτυχθούν όπως απαιτείται.
- Οι πίνακες Array δεν επιτρέπουν τη χρήση τιμών Null.
- Η Deque δεν υποστηρίζει ταυτόχρονη πρόσβαση σε περισσότερα από ένα νήματα.
- Το Deque δεν είναι ασφαλές για νήματα εκτός εάν παρέχεται εξωτερικός συγχρονισμός.
ArrayDeque στην Ιάβα
Το ArrayDeque ανήκει στο πακέτο java.util. Εφαρμόζει τη διεπαφή deque. Εσωτερικά, η κλάση ArrayDeque χρησιμοποιεί μια δυναμικά προσαρμόσιμη σειρά που αυξάνεται καθώς αυξάνεται ο αριθμός των στοιχείων.
Το παρακάτω διάγραμμα δείχνει την ιεραρχία για την τάξη ArrayDeque:
Όπως φαίνεται στο διάγραμμα, η κλάση ArrayDeque κληρονομεί την κλάση AbstractCollection και εφαρμόζει τη διεπαφή Deque.
πώς να βρείτε το xpath σε χρώμιο για σελήνιο
Μπορούμε να δημιουργήσουμε ένα αντικείμενο deque χρησιμοποιώντας την τάξη ArrayDeque όπως φαίνεται παρακάτω:
Deque deque_obj = new ArrayDeque ();
και παράδειγμα
Το ακόλουθο πρόγραμμα Java δείχνει ένα απλό παράδειγμα για την καλύτερη κατανόηση της deque. Εδώ, χρησιμοποιήσαμε την τάξη ArrayDeque για να δημιουργήσουμε το περιβάλλον του deque. Μόλις προσθέσαμε ορισμένα στοιχεία στο αντικείμενο deque και στη συνέχεια τα εκτυπώσαμε χρησιμοποιώντας έναν βρόχο 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 + ' '); } } }
Παραγωγή:
Το Java API ΚΑΙ ΜΕΘΟΔΟΙ
Καθώς η διεπαφή deque εφαρμόζει μια διεπαφή ουράς, υποστηρίζει όλες τις μεθόδους της διεπαφής ουράς. Εκτός αυτού, η διασύνδεση deque παρέχει τις ακόλουθες μεθόδους που μπορούν να χρησιμοποιηθούν για την εκτέλεση διαφόρων λειτουργιών με το αντικείμενο deque.
Ας συνοψίσουμε αυτές τις μεθόδους στον παρακάτω πίνακα.
Μέθοδος | Πρωτότυπο μεθόδου | Περιγραφή |
---|---|---|
getFirst | E getFirst () | Ανακτήστε το πρώτο στοιχείο της deque χωρίς να το αφαιρέσετε. |
Προσθήκη | boolean add (E ε) | Προσθέτει το δεδομένο στοιχείο e στο deque (στην ουρά) χωρίς να παραβιάζει τους περιορισμούς χωρητικότητας και επιστρέφει αληθές εάν επιτύχει. Ρίχνει το IllegalStateException εάν δεν υπάρχει διαθέσιμος χώρος στο deque. |
addFirst | void addFirst (E ε) | Προσθέτει το στοιχείο e στο μπροστινό μέρος της ουράς χωρίς να παραβιάζει τους περιορισμούς χωρητικότητας. |
addLast | void addLast (E ε) | Προσθέτει το στοιχείο e στο τελευταίο του deque χωρίς να παραβιάζει τους περιορισμούς χωρητικότητας. |
περιέχει | Το boolean περιέχει (αντικείμενο o) | Ελέγχει εάν το deque περιέχει δεδομένο στοιχείο o. Επιστρέφει true αν ναι. |
φθίνουσαIterator | Iterator φθίνουσαIterator () | Αυτή η μέθοδος επιστρέφει τον επαναληπτικό αντίστροφης τάξης για το deque. |
στοιχείο | E στοιχείο () | Επιστρέφει το πρώτο στοιχείο ή το κεφάλι της deque. Σημειώστε ότι δεν διαγράφει το στοιχείο. |
getLast | E getLast () | Παίρνει το τελευταίο στοιχείο της deque χωρίς να το αφαιρέσει. |
επαναληπτικό | Επαναληπτικό επανάληψης () | Επιστρέφει έναν τυπικό επαναληπτικό πάνω από τα στοιχεία της deque. |
προσφορά | boolean προσφορά (E ε) | Προσθέτει το στοιχείο e στο deque (ως ουρά) χωρίς να παραβιάζει τους περιορισμούς χωρητικότητας. Επιστρέφει αλήθεια στην επιτυχία και ψευδές στην αποτυχία. |
προσφορά Πρώτα | boolean offerFirst (E ε) | Εισάγετε το δεδομένο στοιχείο e στο μπροστινό μέρος του deque χωρίς να παραβιάζετε τους περιορισμούς χωρητικότητας. |
προσφορά Τελευταία | boolean offerLast (E ε) | Εισαγάγετε το δεδομένο στοιχείο e στο τέλος του deque χωρίς να παραβιάζετε τους περιορισμούς χωρητικότητας. |
κρυφοκοίταγμα | E peek () | Επιστρέφει το κεφάλι της deque (πρώτο στοιχείο) ή null εάν η ουρά είναι κενή. ** δεν διαγράφει την κεφαλή |
peekFirst | E peekFirst () | Επιστρέφει το πρώτο στοιχείο στο deque χωρίς να το διαγράψετε. Επιστρέφει null εάν το deque είναι κενό. |
peekLast | Ε peekLast () | Ανακτά το τελευταίο στοιχείο στο deque χωρίς να το αφαιρέσει. Επιστρέφει null εάν το deque είναι κενό. |
ψηφοφορία | E δημοσκόπηση () | Διαγράφει και επιστρέφει το κεφάλι του deque. Επιστρέφει null εάν το deque είναι κενό. |
pollFirst | Πρώτη δημοσκόπηση () | Επιστρέφει και αφαιρεί το πρώτο στοιχείο της deque. Επιστρέφει null εάν το deque είναι κενό. |
pollLast | E pollLast () | Επιστρέφει και αφαιρεί το τελευταίο στοιχείο του deque. Επιστρέφει null εάν το deque είναι κενό. |
κρότος | E pop () | Βάλτε το στοιχείο από τη στοίβα που αναπαριστάται χρησιμοποιώντας το deque. |
Σπρώξτε | κενή ώθηση (E ε) | Σπρώξτε το δεδομένο στοιχείο e στη στοίβα που αντιπροσωπεύεται χρησιμοποιώντας deque χωρίς να παραβιάσετε τους περιορισμούς χωρητικότητας. Επιστρέφει αληθινά στην επιτυχία ή το IllegalStateException εάν δεν υπάρχει διαθέσιμος χώρος στο deque. |
αφαιρώ | E αφαίρεση () | Αφαιρέστε και επιστρέψτε το κεφάλι του deque. |
αφαιρώ | boolean remove (Αντικείμενο o) | Αφαιρέστε την πρώτη εμφάνιση του δεδομένου στοιχείου o από το deque. |
αφαιρέστε πρώτα | E removeFirst () | Αφαιρέστε και επιστρέψτε το πρώτο στοιχείο του deque. |
αφαίρεσηFirstOccurrence | boolean removeFirstOccurrence (αντικείμενο o) | Αφαιρεί την πρώτη εμφάνιση του δεδομένου στοιχείου o από το deque. |
αφαίρεση Τελευταία | E removeLast () | Ανακτά και διαγράφει το τελευταίο στοιχείο στο deque. |
αφαίρεσηLastOccurrence | boolean removeLastOccurrence (αντικείμενο o) | Διαγράφει την τελευταία εμφάνιση ενός δεδομένου στοιχείου o από το deque. |
Μέγεθος | int μέγεθος () | Επιστρέφει το μέγεθος ή τον αριθμό των στοιχείων στο deque. |
Και εφαρμογή στην Java
Ας εφαρμόσουμε τώρα ένα πρόγραμμα Java για να δείξουμε μερικές από τις σημαντικότερες μεθόδους deque που συζητήθηκαν παραπάνω.
Σε αυτό το πρόγραμμα, χρησιμοποιούμε μια συμβολοσειρά deque και στη συνέχεια προσθέτουμε στοιχεία σε αυτό το deque χρησιμοποιώντας διάφορες μεθόδους όπως add, addFirst, addLast, push, offer, offerFirst κ.λπ. Στη συνέχεια προβάλλουμε το deque. Στη συνέχεια, ορίζουμε τα τυπικά και αντίστροφα επαναληπτικά για το deque και διασχίζουμε το deque για να εκτυπώσουμε τα στοιχεία.
Χρησιμοποιούμε επίσης τις άλλες μεθόδους όπως περιέχει, pop, push, peek, poll, remove κ.λπ.
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); } }
Παραγωγή:
Συχνές Ερωτήσεις
Ε # 1) Είναι το Deque ασφαλές για Java;
Απάντηση: Το ArrayDeque δεν είναι ασφαλές για νήματα. Αλλά η διασύνδεση BlockingDeque στην κλάση java.util.concurrent αντιπροσωπεύει το deque. Αυτό το deque είναι ασφαλές για νήματα.
Ε # 2) Γιατί το Deque είναι πιο γρήγορο από το stack;
Απάντηση: Η διεπαφή ArrayDeque που εφαρμόζει τη διασύνδεση deque είναι αποδοτική στη μνήμη, καθώς δεν χρειάζεται να παρακολουθεί τους προηγούμενους ή τους επόμενους κόμβους. Επίσης, είναι μια δυνατότητα αλλαγής μεγέθους. Έτσι το deque είναι ταχύτερο από το stack.
Q # 3) Είναι η Deque μια στοίβα;
Απάντηση: Το deque είναι μια ουρά με δύο άκρες. Επιτρέπει τη συμπεριφορά LIFO και έτσι μπορεί να εφαρμοστεί ως στοίβα αν και δεν είναι στοίβα.
Q # 4) Πού χρησιμοποιείται το Deque;
Απάντηση: Ένα deque χρησιμοποιείται ως επί το πλείστον για την εφαρμογή χαρακτηριστικών όπως αναίρεση και ιστορία.
Ε # 5) Είναι το Deque κυκλικό;
Απάντηση: Ναι, η Deque είναι κυκλική.
συμπέρασμα
Αυτό ολοκληρώνει το σεμινάριό μας για τη διεπαφή Deque στην Java. Η διασύνδεση deque υλοποιείται από μια δομή δεδομένων deque που είναι μια συλλογή που μπορεί να εισαγάγει και να διαγράψει στοιχεία και από τα δύο άκρα.
Οι δύο κατηγορίες, δηλαδή οι ArrayDeque και LinkedList εφαρμόζουν τη διεπαφή deque. Μπορούμε να χρησιμοποιήσουμε αυτές τις τάξεις για να εφαρμόσουμε τη λειτουργικότητα της διασύνδεσης deque.
=> Επισκεφτείτε εδώ για την αποκλειστική σειρά εκπαιδευτικών εκμάθησης Java.
Συνιστώμενη ανάγνωση
- Διπλή ουρά (Deque) σε C ++ με παραδείγματα
- Java Queue - Μέθοδοι ουράς, υλοποίηση ουράς με παραδείγματα
- Εκπαιδευτικό πρόγραμμα ουράς προτεραιότητας Java - Εφαρμογή & παραδείγματα
- Δομή δεδομένων ουράς προτεραιότητας σε C ++ με απεικόνιση
- Δομή δεδομένων ουράς σε C ++ με απεικόνιση
- Δομή δεδομένων κυκλικής ουράς C ++: Εφαρμογή & εφαρμογές
- Εκπαιδευτικό πρόγραμμα JAVA για αρχάριους: 100+ πρακτικά εκπαιδευτικά βίντεο Java
- Ουρά προτεραιότητας στο STL