Mediumqueuedeque

Что такое Queue и Deque?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Queue<E> — FIFO очередь. Deque<E> — double-ended queue, добавить/взять с обоих концов; может использоваться как queue (FIFO) или stack (LIFO).

// Deque как стек (LIFO) — лучше Stack, использовать ArrayDeque
Deque<String> stack = new ArrayDeque<>();
stack.push("a");   // addFirst
stack.pop();       // removeFirst

// Queue (FIFO)
Queue<String> q = new LinkedList<>();
q.offer("a");      // добавить, false если полон
String head = q.poll();  // убрать, null если пусто

// PriorityQueue — heap, head = наименьший
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(3); pq.offer(1);
pq.poll();   // 1 (наименьший)
  • Queue: offer/poll/peek (null при пусто) vs add/remove/element (exception);
  • ArrayDeque рекомендуется для стека/дека; Stack — legacy;
  • Concurrent: ArrayBlockingQueue, LinkedBlockingQueue, LinkedBlockingDeque, ConcurrentLinkedQueue.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.