Что такое ArrayDeque в Java?

«Что такое ArrayDeque в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ArrayDeque (Array Double Ended Queue) — это реализация интерфейса Deque в Java, использующая в основе изменяемый массив. Он предоставляет эффективную двустороннюю очередь, поддерживающую добавление и удаление элементов как с начала, так и с конца.

Характеристики и сравнение:

  • Производительность: Обычно работает быстрее, чем LinkedList, при использовании в качестве стека или очереди, благодаря лучшей локализации данных в памяти (массив против узлов).
  • Ограничения:
    • Не поддерживает хранение null элементов.
    • Не является потокобезопасным.
    • Имеет ограничение на размер (максимальное значение Integer.MAX_VALUE).
  • Использование: Предпочтительный выбор для реализации стека (LIFO) или очереди (FIFO) в однопоточных сценариях.

Пример использования в качестве стека и очереди:

import java.util.ArrayDeque;
import java.util.Deque;

public class Example {
    public static void main(String[] args) {
        // Использование как стека (LIFO)
        Deque<String> stack = new ArrayDeque<>();
        stack.push("First"); // Добавить в начало
        stack.push("Second");
        System.out.println(stack.pop()); // Удалить и вернуть первый -> "Second"

        // Использование как очереди (FIFO)
        Deque<String> queue = new ArrayDeque<>();
        queue.offer("First");  // Добавить в конец
        queue.offer("Second");
        System.out.println(queue.poll()); // Удалить и вернуть первый -> "First"
    }
}

Рекомендация: Вместо устаревшего класса Stack используйте ArrayDeque для реализации стека.