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. Деке вимовляється як 'колода', як у 'колоді карт'.
=> Познайомтесь тут, щоб побачити A-Z підручників із навчання Java тут.
Що ви дізнаєтесь:
Приблизно Java
Типова колекція deque буде виглядати, як показано нижче:
як відкрити bin файли в android - -
Deque в основному використовується для реалізації стекових, чергових або спискових структур даних. Він також може бути використаний для реалізації пріоритетних черг. Особливості скасування або історії, які в основному присутні у веб-браузерах, можуть бути реалізовані за допомогою deques.
Інтерфейс Java Deque
На діаграмі нижче показано ієрархію двосторонньої черги або деке. Як показано на діаграмі нижче, інтерфейс Deque поширюється на інтерфейс Queue, який, у свою чергу, розширює інтерфейс Collection.
Щоб використовувати інтерфейс 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 підтримує масштабовані масиви, які можуть зростати за необхідності.
- Декаси масивів не дозволяють використовувати значення Null.
- Deque не підтримує одночасний доступ більше ніж одним потоком.
- Deque не є безпечним для потоків, якщо не передбачена зовнішня синхронізація.
ArrayDeque в Java
ArrayDeque належить до пакету java.util. Він реалізує інтерфейс deque. Внутрішньо клас ArrayDeque використовує динамічно змінюваний розмір масиву, який зростає із збільшенням кількості елементів.
На наведеній нижче схемі показана ієрархія класу ArrayDeque:
Як показано на схемі, клас ArrayDeque успадковує клас AbstractCollection і реалізує інтерфейс Deque.
найкраще програмне забезпечення для обслуговування системи для Windows 10
Ми можемо створити об'єкт deque, використовуючи клас ArrayDeque, як показано нижче:
Deque deque_obj = new ArrayDeque ();
та Приклад
Наступна програма Java демонструє простий приклад для кращого розуміння деке. Тут ми використовували клас 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 () | Витягніть перший елемент деке, не видаляючи його. |
додати | логічне додавання (E e) | Додає заданий елемент e у число (у хвості), не порушуючи обмеження пропускної здатності, і повертає true, якщо успіх Викидає IllegalStateException, якщо в деке немає місця. |
addFirst | void addFirst (E e) | Додає заданий елемент e до передньої частини черги без порушення обмежень пропускної здатності. |
addLast | void addLast (E e) | Додає елемент e до останньої частини деке без порушення обмежень ємності. |
містить | boolean містить (Об'єкт o) | Перевіряє, чи містить дек заданий елемент o. Повертає true, якщо так. |
спаднийIterator | Ітератор за спаданням Ітератор () | Цей метод повертає ітератор зворотного порядку для модуля. |
елемент | Е-елемент () | Повертає перший елемент або головку деке. Зверніть увагу, що він не видаляє елемент. |
getLast | E getLast () | Отримує останній елемент деке, не видаляючи його. |
ітератор | Ітератор ітератора () | Повертає стандартний ітератор над елементами deque. |
пропозиція | логічна пропозиція (E e) | Додає даний елемент e до деке (як хвіст) без порушення обмежень пропускної здатності. Повертає true при успіху та false при невдачі. |
пропозиціяПерша | boolean offerFirst (E e) | Вставте даний елемент e в передню частину кришки, не порушуючи обмеження потужності. |
пропозиціяОстанній | boolean offerLast (E e) | Вставте даний елемент e в кінець дека, не порушуючи обмеження потужності. |
зазирнути | E peek () | Повертає заголовок deque (перший елемент) або null, якщо черга порожня. ** не видаляє голову |
заглянути | E peekFirst () | Повертає перший елемент у deque без його видалення. Повертає значення null, якщо параметр deque порожній. |
peekОстанній | E peekLast () | Отримує останній елемент у deque, не видаляючи його. Повертає значення null, якщо параметр deque порожній. |
опитування | Електронне опитування () | Видаляє і повертає головку деке. Повертає значення null, якщо параметр deque порожній. |
опитуванняПерше | E опитуванняПерший () | Повертає та видаляє перший елемент деке. Повертає значення null, якщо параметр deque пустий. |
опитуванняОстанній | E опитуванняОстанній () | Повертає та видаляє останній елемент деке. Повертає значення null, якщо параметр deque порожній. |
поп | E поп () | Витягніть елемент зі стека, який представлений за допомогою deque. |
штовхати | порожній поштовх (E e) | Вставте даний елемент e у стек, представлений із використанням deque, не порушуючи обмеження ємності. Повертає true при успіху або IllegalStateException, якщо на deque немає місця. |
видалити | E видалити () | Зніміть і поверніть головку деке. |
видалити | логічне видалення (Об'єкт o) | Видаліть перше входження даного елемента o з числа deque. |
видалитиПерший | E removeFirst () | Видаліть і поверніть перший елемент деке. |
removeFirstOccurrence | boolean removeFirstOccurrence (Об'єкт o) | Видаляє перше входження даного елемента o з деке. |
removeLast | E removeLast () | Отримує та видаляє останній елемент у deque. |
removeLastOccurrence | boolean removeLastOccurrence (Об'єкт o) | Видаляє останнє входження даного елемента o з числа deque. |
розмір | розмір int () | Повертає розмір або кількість елементів у декалі. |
І реалізація в Java
Давайте зараз реалізуємо програму Java, щоб продемонструвати деякі основні методи обробки, розглянуті вище.
У цій програмі ми використовуємо тип String, а потім додаємо елементи до цього deque за допомогою різних методів, таких як add, addFirst, addLast, push, offer, offerFirst тощо. Потім ми відображаємо 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. Ця деке є різьбонадійною.
Q # 2) Чому Deque швидше, ніж стек?
Відповідь: Інтерфейс ArrayDeque, який реалізує інтерфейс deque, є ефективною пам’яттю, оскільки йому не потрібно відстежувати попередні або наступні вузли. Крім того, це можливість зміни розміру. Таким чином, деке швидше, ніж стек.
Q # 3) Deque - це стек?
Відповідь: Deque - це подвійна черга. Це дозволяє поведінку LIFO, і, отже, його можна реалізувати як стек, хоча це не стек.
Q # 4) Де використовується Деке?
Відповідь: Деке в основному використовується для реалізації таких функцій, як скасування та історія.
Q # 5) Чи є Deque круговим?
Відповідь: Так, Деке кругова.
Висновок
На цьому наш підручник з інтерфейсу Deque в Java закінчується. Інтерфейс deque реалізований структурою даних deque, яка є колекцією, яка може вставляти та видаляти елементи з обох кінців.
Два класи, тобто ArrayDeque і LinkedList, реалізують інтерфейс deque. Ми можемо використовувати ці класи для реалізації функціональності інтерфейсу deque.
=> Завітайте сюди, щоб ознайомитись із ексклюзивною серією навчальних посібників Java.
Рекомендована література
- Двостороння черга (Deque) в C ++ із прикладами
- Черга Java - методи черги, реалізація черги на прикладах
- Підручник з черги пріоритетів Java - Впровадження та приклади
- Структура даних черги пріоритетів у C ++ з ілюстрацією
- Структура даних черги в C ++ з ілюстрацією
- Структура даних кругової черги C ++: Впровадження та програми
- Підручник JAVA для початківців: 100+ практичних навчальних посібників Java
- Черга пріоритетів у STL