ArrayDeque (читається як еррейдек) – це клас який забезпечує двосторонню чергу. Іншими словами - це автоматично зростаючий масив, що дозволяє нам додавати або видаляти елементи з обох боків черги. ArrayDeque може бути використано як стек (LIFO, останній ввійшов - перший вийшов) або ж як черга (FIFO, перший ввійшов - перший вийшов).
ArrayDeque не може містити в якості елемента null.
Клас ArrayDeque швидший за клас Stack, якщо використовувати його в якості стеку і швидший за LinkedList, якщо використовувати в якості черги.
ArrayDeque розширює клас AbstractCollection та реалізує інтерфейси Deque, Cloneable, Serializable. Таким чином ми можемо використовувати для роботи з даним класом, як методи інтерфейсу Deque (який розширює інтерфейс Queue) так і методи інтерфейсу Collection.
Якщо використовується ітератор, то він буде викидати виняток ConcurrentModificationException, якщо вміст ArrayDeque був модифікований після створення ітератора. Таким чином ітератор необхідно з обережністю використовувати з ArrayDeque.
В ArrayDeque доступні наступні конструктори:
Наступний приклад демонструє роботу із ArrayDeque у вигляді стека та у в вигляді черги:
Результат роботи:
ArrayDeque не може містити в якості елемента null.
Клас ArrayDeque швидший за клас Stack, якщо використовувати його в якості стеку і швидший за LinkedList, якщо використовувати в якості черги.
ArrayDeque розширює клас AbstractCollection та реалізує інтерфейси Deque, Cloneable, Serializable. Таким чином ми можемо використовувати для роботи з даним класом, як методи інтерфейсу Deque (який розширює інтерфейс Queue) так і методи інтерфейсу Collection.
Якщо використовується ітератор, то він буде викидати виняток ConcurrentModificationException, якщо вміст ArrayDeque був модифікований після створення ітератора. Таким чином ітератор необхідно з обережністю використовувати з ArrayDeque.
В ArrayDeque доступні наступні конструктори:
ArrayDeque() // пустий ArrayDeque з початковим об’ємом 16 елентів ArrayDeque(Collection c) // міститиме елементи колекції в порядку, що повертає ітератор даної колекції ArrayDeque(int numElements) // дозволяє задати початковий об’ємПри потребі збільшення об'єму, то він автоматично збільшується вдвічі.
Наступний приклад демонструє роботу із ArrayDeque у вигляді стека та у в вигляді черги:
import java.util.ArrayDeque; public class TestArrayDeque { public static void main(String[] args) { ArrayDeque<String> ad=new ArrayDeque<>(); System.out.println("Використання в якості стеку"); ad.push("Перший"); // метод інтерфуйсу Deque ad.push("Другий"); ad.push("Третій"); System.out.println("Перший елемент ArrayDeque: "+ad.getFirst());//Отримуємо перший елемент, але не видаляємо System.out.println("Вміст ArrayDeque: "+ad); System.out.println(ad.pop()); //Отримуємо і видаляємо з вершини стеку System.out.println(ad.pop()); //еквівалентно до removeFirst() System.out.println(ad.pop()); //System.out.println(ad.pop()); //ArrayDeque порожній видасть NoSuchElementException System.out.println(); System.out.println("Використання в якості черги"); ad.offer("Перший"); ad.offer("Другий"); ad.offer("Третій"); System.out.println("Перший елемент ArrayDeque: "+ad.getFirst());//Отримуємо перший елемент, але не видаляємо System.out.println("Вміст ArrayDeque: "+ad); System.out.println(ad.poll()); //витягнути і видалити з голови System.out.println(ad.poll()); System.out.println(ad.poll()); System.out.println(ad.poll()); } }
Використання в якості стеку Перший елемент ArrayDeque: Третій Вміст ArrayDeque: [Третій, Другий, Перший] Третій Другий Перший Використання в якості черги Перший елемент ArrayDeque: Перший Вміст ArrayDeque: [Перший, Другий, Третій] Перший Другий Третій nullДивіться також:
Немає коментарів:
Дописати коментар