Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Структура Даних Deque у Java | Просунуті Структури Даних у Java
Структури Даних Java

bookСтруктура Даних Deque у Java

Двобічна черга

Deque, або двобічна черга, дозволяє працювати з чергами як з початку, так і з кінця.

Інтерфейс Deque розширює інтерфейс Queue, тому клас, наприклад, LinkedList також реалізує цей інтерфейс.

Відповідно, знову використовується LinkedList, але цього разу з новим інтерфейсом.

Оголошення об'єкта типу Deque не відрізняється від Queue:

Main.java

Main.java

copy
1
Deque<T> deque = new LinkedList<>();

Головна відмінність проявляється, коли ми переходимо до методів цього інтерфейсу.

Оскільки Deque є чергою з двома кінцями (double-ended queue), тобто можна працювати з елементами як на початку, так і в кінці черги, його методи адаптовані до цієї особливості.

Методи

Деякі основні методи інтерфейсу Deque:

  • addFirst(element): додає елемент на початок двосторонньої черги;
  • addLast(element): додає елемент у кінець двосторонньої черги.

Очевидно, у двосторонній черзі існують методи для додавання на початок і в кінець. Назви цих методів говорять самі за себе. Розглянемо ці методи у коді:

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); } }

Як ви можете бачити, після використання методу addFirst(), елемент було додано на початок двосторонньої черги. Це відрізняє його від методу addLast().

У Deque також є звичайний метод add(), який працює так само, як і метод addLast(). Тому вибір методу повністю залежить від вас.

Методи видалення

Якщо існують методи для додавання елементів на початок і кінець, мають бути й методи для видалення з початку та кінця двосторонньої черги.

  • removeFirst(): видаляє та повертає елемент з початку двосторонньої черги;
  • removeLast(): видаляє та повертає елемент з кінця двосторонньої черги.

Методи addFirst() та addLast() виконують видалення елементів з початку та кінця двосторонньої черги.

Розглянемо приклад використання в коді:

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); } }

Як бачите, ми видалили перший і останній елементи з двосторонньої черги, залишивши лише другий елемент.

Це просто та зручно, а назви методів говорять самі за себе.

Методи отримання елементів

Далі розглянемо методи для доступу до елементів у двосторонній черзі.

  • getFirst(): отримує, але не видаляє елемент на початку двосторонньої черги;
  • getLast(): отримує, але не видаляє елемент у кінці двосторонньої черги.

Це дозволяє отримати доступ до першого та останнього елементів у двосторонній черзі.

Тепер розглянемо приклад у коді:

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); } }

Використовуючи методи getFirst() та getLast(), ми отримали перший і останній елементи з двосторонньої черги та присвоїли їх новоствореним змінним.

В інтерфейсі Deque також існують методи peekFirst() і peekLast(), які вирішують проблему виникнення виключення. Замість того, щоб кидати виключення та зупиняти програму, вони повертають null, якщо черга порожня.

Розглянемо приклад:

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); } }

З цього прикладу стало очевидно, що набагато краще використовувати методи peekFirst() і peekLast() замість getFirst() і getLast(), оскільки вони не зупиняють програму у разі помилки.

Однак не забувайте про NullPointerException! Це виключення може спричинити багато проблем у вашій програмі.

Існують також еквівалентні альтернативні методи для методів addFirst(), addLast(), removeFirst() та removeLast(). Ми не будемо детально зупинятися на них, оскільки ви вже розумієте, як працюють ці методи, але ось перелік:

Альтернативні методи

Методи для додавання елемента до дека:

  • offerFirst(E e): додає елемент на початок дека, якщо це можливо, і повертає true. Повертає false, якщо додавання неможливе;
  • offerLast(E e): додає елемент в кінець дека, якщо це можливо, і повертає true. Повертає false, якщо додавання неможливе;
  • push(E e): додає елемент на початок дека, аналогічно до addFirst(). Зверніть увагу, що push() також є методом стеку у класі Deque.

Методи для видалення елемента з дека:

  • pollFirst(): видаляє та повертає перший елемент дека. Повертає null, якщо дек порожній;
  • pollLast(): видаляє та повертає останній елемент дека. Повертає null, якщо дек порожній;
  • pop(): видаляє та повертає перший елемент дека, аналогічно до removeFirst().

Вибір залежить від вимог програми. Завжди можна реалізувати все за допомогою звичайного масиву, але це буде досить складно і не оптимізовано. Саме тому існує так багато різних структур даних — щоб зробити написання різних програм зручнішим.

1. Що означає "Deque"?

2. Який інтерфейс у Java представляє Deque?

3. Яке призначення методу addFirst() у Deque?

4. Який метод використовується для отримання, але не видалення, останнього елемента Deque?

question mark

Що означає "Deque"?

Select the correct answer

question mark

Який інтерфейс у Java представляє Deque?

Select the correct answer

question mark

Яке призначення методу addFirst() у Deque?

Select the correct answer

question mark

Який метод використовується для отримання, але не видалення, останнього елемента Deque?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 2

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Suggested prompts:

What are some real-world use cases for a Deque?

Can you explain the difference between a Deque and a regular Queue?

How do I choose between using addFirst/addLast and offerFirst/offerLast?

bookСтруктура Даних Deque у Java

Свайпніть щоб показати меню

Двобічна черга

Deque, або двобічна черга, дозволяє працювати з чергами як з початку, так і з кінця.

Інтерфейс Deque розширює інтерфейс Queue, тому клас, наприклад, LinkedList також реалізує цей інтерфейс.

Відповідно, знову використовується LinkedList, але цього разу з новим інтерфейсом.

Оголошення об'єкта типу Deque не відрізняється від Queue:

Main.java

Main.java

copy
1
Deque<T> deque = new LinkedList<>();

Головна відмінність проявляється, коли ми переходимо до методів цього інтерфейсу.

Оскільки Deque є чергою з двома кінцями (double-ended queue), тобто можна працювати з елементами як на початку, так і в кінці черги, його методи адаптовані до цієї особливості.

Методи

Деякі основні методи інтерфейсу Deque:

  • addFirst(element): додає елемент на початок двосторонньої черги;
  • addLast(element): додає елемент у кінець двосторонньої черги.

Очевидно, у двосторонній черзі існують методи для додавання на початок і в кінець. Назви цих методів говорять самі за себе. Розглянемо ці методи у коді:

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); } }

Як ви можете бачити, після використання методу addFirst(), елемент було додано на початок двосторонньої черги. Це відрізняє його від методу addLast().

У Deque також є звичайний метод add(), який працює так само, як і метод addLast(). Тому вибір методу повністю залежить від вас.

Методи видалення

Якщо існують методи для додавання елементів на початок і кінець, мають бути й методи для видалення з початку та кінця двосторонньої черги.

  • removeFirst(): видаляє та повертає елемент з початку двосторонньої черги;
  • removeLast(): видаляє та повертає елемент з кінця двосторонньої черги.

Методи addFirst() та addLast() виконують видалення елементів з початку та кінця двосторонньої черги.

Розглянемо приклад використання в коді:

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); } }

Як бачите, ми видалили перший і останній елементи з двосторонньої черги, залишивши лише другий елемент.

Це просто та зручно, а назви методів говорять самі за себе.

Методи отримання елементів

Далі розглянемо методи для доступу до елементів у двосторонній черзі.

  • getFirst(): отримує, але не видаляє елемент на початку двосторонньої черги;
  • getLast(): отримує, але не видаляє елемент у кінці двосторонньої черги.

Це дозволяє отримати доступ до першого та останнього елементів у двосторонній черзі.

Тепер розглянемо приклад у коді:

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); } }

Використовуючи методи getFirst() та getLast(), ми отримали перший і останній елементи з двосторонньої черги та присвоїли їх новоствореним змінним.

В інтерфейсі Deque також існують методи peekFirst() і peekLast(), які вирішують проблему виникнення виключення. Замість того, щоб кидати виключення та зупиняти програму, вони повертають null, якщо черга порожня.

Розглянемо приклад:

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); } }

З цього прикладу стало очевидно, що набагато краще використовувати методи peekFirst() і peekLast() замість getFirst() і getLast(), оскільки вони не зупиняють програму у разі помилки.

Однак не забувайте про NullPointerException! Це виключення може спричинити багато проблем у вашій програмі.

Існують також еквівалентні альтернативні методи для методів addFirst(), addLast(), removeFirst() та removeLast(). Ми не будемо детально зупинятися на них, оскільки ви вже розумієте, як працюють ці методи, але ось перелік:

Альтернативні методи

Методи для додавання елемента до дека:

  • offerFirst(E e): додає елемент на початок дека, якщо це можливо, і повертає true. Повертає false, якщо додавання неможливе;
  • offerLast(E e): додає елемент в кінець дека, якщо це можливо, і повертає true. Повертає false, якщо додавання неможливе;
  • push(E e): додає елемент на початок дека, аналогічно до addFirst(). Зверніть увагу, що push() також є методом стеку у класі Deque.

Методи для видалення елемента з дека:

  • pollFirst(): видаляє та повертає перший елемент дека. Повертає null, якщо дек порожній;
  • pollLast(): видаляє та повертає останній елемент дека. Повертає null, якщо дек порожній;
  • pop(): видаляє та повертає перший елемент дека, аналогічно до removeFirst().

Вибір залежить від вимог програми. Завжди можна реалізувати все за допомогою звичайного масиву, але це буде досить складно і не оптимізовано. Саме тому існує так багато різних структур даних — щоб зробити написання різних програм зручнішим.

1. Що означає "Deque"?

2. Який інтерфейс у Java представляє Deque?

3. Яке призначення методу addFirst() у Deque?

4. Який метод використовується для отримання, але не видалення, останнього елемента Deque?

question mark

Що означає "Deque"?

Select the correct answer

question mark

Який інтерфейс у Java представляє Deque?

Select the correct answer

question mark

Яке призначення методу addFirst() у Deque?

Select the correct answer

question mark

Який метод використовується для отримання, але не видалення, останнього елемента Deque?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 2
some-alt