deque java deque implementation
Този урок предоставя подробно обяснение на Deque или „Двойна опашка“ в 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 на уроците за обучение по Java тук.
Какво ще научите:
Около Java
Типична колекция deque ще изглежда както е показано по-долу:
въпроси за интервю за разработчици .net
Deque се използва най-вече за внедряване на стек, опашка или списък на структури от данни. Може да се използва и за изпълнение на приоритетни опашки. Функциите на отмените или историята, присъстващи най-вече в уеб браузърите, могат да бъдат внедрени с помощта на deques.
Java Deque интерфейс
Диаграмата по-долу показва йерархията за двойната опашка или deque. Както е показано на диаграмата по-долу, интерфейсът Deque се простира до интерфейса на опашката, който от своя страна разширява интерфейса за събиране.
За да използваме deque интерфейс в нашата програма, трябва да импортираме пакета, който съдържа deque функционалност, използвайки оператор за импортиране, както е показано по-долу.
import java.util.deque;
или
import java.util.*;
Тъй като deque е интерфейс, ние се нуждаем от конкретни класове, за да реализираме функционалността на deque интерфейса.
Двата класа по-долу изпълняват deque интерфейса.
- ArrayDeque
- LinkedList
Следователно можем да създаваме deque обекти, като използваме тези два класа, както е показано по-долу:
Deque numdeque = new ArrayDeque (); Deque strDeque = new LinkedList ();
По този начин, след като горните deque обекти са създадени успешно, те могат да използват функционалността на deque интерфейса.
Дадени по-долу са няколко важни точки, които трябва да се отбележат относно deque:
- Deque интерфейсът поддържа променящи се масиви, които могат да растат според изискванията.
- Декетите на масиви не позволяват използването на Null стойности.
- Deque не поддържа едновременен достъп от повече от една нишка.
- Deque не е безопасен за нишки, освен ако не е осигурена външна синхронизация.
ArrayDeque в Java
ArrayDeque принадлежи към пакета java.util. Той изпълнява deque интерфейса. Вътрешно класът ArrayDeque използва динамично мащабируем масив, който нараства с увеличаването на броя на елементите.
Диаграмата по-долу показва йерархията за класа ArrayDeque:
Както е показано на диаграмата, класът ArrayDeque наследява класа AbstractCollection и реализира интерфейса Deque.
какво означава несъответствие на ключовете за мрежова сигурност
Можем да създадем обект 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 + ' '); } } }
Изход:
API на Java и МЕТОДИ
Тъй като интерфейсът deque реализира интерфейс на опашката, той поддържа всички методи на интерфейса на опашката. Освен това интерфейсът deque предоставя следните методи, които могат да се използват за извършване на различни операции с обекта deque.
Нека обобщим тези методи в таблицата по-долу.
Метод | Прототип на метода | Описание |
---|---|---|
getFirst | E getFirst () | Изтеглете първия елемент на deque, без да го премахвате. |
добавете | булево добавяне (E e) | Добавя даден елемент e в deque (в опашката), без да нарушава ограниченията на капацитета и връща true при успех. Изхвърля IllegalStateException, ако няма място в deque. |
addFirst | void addFirst(E e) | Добавя даден елемент e към предната част на опашката, без да нарушава ограниченията на капацитета. |
addLast | void addLast(E e) | Добавя елемент e към последния от дека, без да нарушава ограниченията на капацитета. |
съдържа | boolean съдържа (Обект o) | Проверява дали deque съдържа даден елемент o. Връща вярно, ако да. |
низходящIterator | Итератор низходящ Итератор () | Този метод връща итератор за обратен ред за deque. |
елемент | E element() | Връща първия елемент или главата на deque. Имайте предвид, че не изтрива елемента. |
getLast | E getLast() | Получава последния елемент на deque, без да го премахва. |
итератор | Итератор на итератор () | Връща стандартен итератор върху елементите на deque. |
оферта | булево предложение (E e) | Добавя даден елемент e към deque (като опашка), без да нарушава ограниченията на капацитета. Връща true при успех и false при неуспех. |
офертаПърво | boolean offerFirst (E e) | Поставете дадения елемент e отпред на уреда, без да нарушавате ограниченията на капацитета. |
offerLast | boolean offerLast (E e) | Поставете дадения елемент e в края на уреда, без да нарушавате ограниченията на капацитета. |
надникнете | E peek() | Връща head на deque (първия елемент) или null, ако опашката е празна. ** не изтрива главата |
надникнете Първо | E peekFirst() | Връща първия елемент в deque, без да го изтрива. Връща null, ако deque е празен. |
поглед Последно | E peekLast() | Извлича последния елемент в deque, без да го премахва. Връща null, ако deque е празен. |
анкета | E poll() | Изтрива и връща главата на дека. Връща null, ако deque е празен. |
анкета Първо | E pollFirst() | Връща и премахва първия елемент на deque. Връща null, ако deque е празен. |
анкета Последно | E анкета Последно () | Връща и премахва последния елемент на deque. Връща null, ако deque е празен. |
поп | E поп () | Изкачете елемента от стека, който е представен с помощта на deque. |
натиснете | празно натискане (E e) | Натиснете даден елемент e върху стека, представен с помощта на deque, без да нарушавате ограниченията на капацитета. Връща true при успех или IllegalStateException, ако няма място на deque. |
Премахване | E премахване () | Извадете и върнете главата на дека. |
Премахване | булево премахване (обект o) | Премахнете първата поява на дадения елемент o от deque. |
премахнете Първо | E removeFirst () | Премахнете и върнете първия елемент на deque. |
removeFirstOccurrence | boolean removeFirstOccurrence (Обект o) | Премахва първата поява на дадения елемент o от deque. |
removeLast | E removeLast () | Извлича и изтрива последния елемент в deque. |
removeLastOccurrence | boolean removeLastOccurrence (Обект o) | Изтрива последното появяване на даден елемент o от deque. |
размер | размер int () | Връща размера или броя на елементите в deque. |
И внедряване в Java
Нека сега да приложим Java програма, за да демонстрираме някои от основните deque методи, обсъдени по-горе.
В тази програма използваме String тип deque и след това добавяме елементи към този deque с помощта на различни методи като add, addFirst, addLast, push, offer, offerFirst и т.н. След това показваме deque. След това дефинираме стандартните и обратни итератори за deque и преминаваме през deque, за да отпечатаме елементите.
Използваме и другите методи като съдържа, изскачане, натискане, надникване, анкетиране, премахване и т.н.
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) Java-защитена ли е от нишки Deque?
Отговор: ArrayDeque не е безопасен за нишки. Но интерфейсът BlockingDeque в класа java.util.concurrent представлява deque. Този deque е безопасен за конци.
Q # 2) Защо Deque е по-бърз от стека?
Отговор: Интерфейсът ArrayDeque, който реализира интерфейса deque, е с ефективна памет, тъй като не е необходимо да следи предишните или следващите възли. Също така, това е променлива за изпълнение. По този начин deque е по-бърз от стека.
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