Feedback Form

Deque Operations: addFirst/last, pollFirst/last, peek – Full API Guide

Deque Operations: addFirst/last, pollFirst/last, peek – Full API Guide

Java में Deque (Double Ended Queue) एक बहुत ही useful data structure है, जिसमें हम elements को दोनों सिरों (front और rear) से जोड़ (add) या हटा (remove) सकते हैं। इसका मतलब है कि आप इसे queue की तरह भी use कर सकते हैं और stack की तरह भी। इसीलिए Deque को अक्सर “Hybrid Structure” कहा जाता है।

इस blog में हम step-by-step समझेंगे कि Deque के operations जैसे addFirst(), addLast(), pollFirst(), pollLast() और peek() कैसे काम करते हैं, किस समय कौन-सा method use करना चाहिए, और exam के लिए कौन से points याद रखने जरूरी हैं।

What is Deque in Java?

Deque का पूरा नाम है Double Ended Queue। इसमें elements को front और rear दोनों तरफ से insert या delete किया जा सकता है। यह Java Collection Framework का हिस्सा है और इसका interface java.util.Deque package में मौजूद है।

Deque की सबसे आम implementations हैं:

  • ArrayDeque – Fast, dynamic array-based implementation
  • LinkedList – Node-based implementation, जो flexible और memory efficient होती है

Deque Interface Hierarchy

Deque interface, Queue interface को extend करता है। यानी Queue में जो basic operations (add, remove, peek) होते हैं, वो Deque में भी होते हैं, लेकिन उनके advanced versions के साथ।


Collection ← Queue ← Deque ← ArrayDeque / LinkedList

Main Deque Operations

अब हम Deque के core methods को detail में समझते हैं — ये methods exam और interview दोनों के लिए बहुत जरूरी हैं।

1. addFirst(E element)

यह method किसी element को Deque के front (शुरुआती हिस्से) में जोड़ने के लिए use किया जाता है।


Deque<Integer> dq = new ArrayDeque<>();
dq.addFirst(10);
dq.addFirst(20);
System.out.println(dq); // Output: [20, 10]
  • Use Case: जब आपको LIFO (Last In First Out) behavior चाहिए, जैसे Stack।
  • Exception Handling: अगर capacity full है (bounded deque), तो यह IllegalStateException फेंक सकता है।

2. addLast(E element)

यह method किसी element को Deque के अंत (rear side) में जोड़ता है।


Deque<String> dq = new ArrayDeque<>();
dq.addLast("A");
dq.addLast("B");
System.out.println(dq); // Output: [A, B]
  • Use Case: जब आपको FIFO (First In First Out) behavior चाहिए, जैसे Queue।
  • Performance: Constant time complexity – O(1)

3. pollFirst()

यह method Deque के front से element को हटाता (remove) है और उसे return करता है। अगर Deque खाली है तो यह null return करता है।


Deque<Integer> dq = new ArrayDeque<>();
dq.add(10);
dq.add(20);
System.out.println(dq.pollFirst()); // Output: 10
System.out.println(dq); // Output: [20]
  • Difference: removeFirst() exception फेंकता है अगर Deque खाली हो, जबकि pollFirst() null return करता है।

4. pollLast()

यह method Deque के end से element को हटाता है और उसे return करता है। अगर Deque खाली है तो यह भी null return करता है।


Deque<String> dq = new ArrayDeque<>();
dq.add("A");
dq.add("B");
System.out.println(dq.pollLast()); // Output: B
System.out.println(dq); // Output: [A]
  • Use Case: जब आपको stack के pop operation जैसा behavior चाहिए।

5. peek(), peekFirst(), peekLast()

ये methods elements को देख (inspect) तो लेते हैं लेकिन remove नहीं करते।


Deque<Integer> dq = new ArrayDeque<>();
dq.add(100);
dq.add(200);
System.out.println(dq.peek());      // Output: 100
System.out.println(dq.peekFirst()); // Output: 100
System.out.println(dq.peekLast());  // Output: 200
  • peek() → Front element को return करता है।
  • peekFirst() → Same as peek(), front element देता है।
  • peekLast() → Last element देता है।
  • Deque खाली होने पर ये methods null return करते हैं।

Difference between add() and offer()

Point add() offer()
Exception Handling Exception फेंकता है अगर Deque full हो false return करता है अगर Deque full हो
Return Type boolean या Exception boolean
Best For Unbounded Deque Bounded Deque

Deque as Queue and Stack

Deque इतना flexible structure है कि इसे आप दो तरह से use कर सकते हैं:

Deque as Queue


Deque<Integer> dq = new ArrayDeque<>();
dq.addLast(1);
dq.addLast(2);
dq.addLast(3);
System.out.println(dq.pollFirst()); // Output: 1
  • Front से remove करना – FIFO behavior

Deque as Stack


Deque<Integer> stack = new ArrayDeque<>();
stack.addFirst(10);
stack.addFirst(20);
System.out.println(stack.pollFirst()); // Output: 20
  • Front से remove करना – LIFO behavior

Time Complexity of Deque Operations

Operation Average Time Worst Case
addFirst() / addLast() O(1) O(1)
pollFirst() / pollLast() O(1) O(1)
peek(), peekFirst(), peekLast() O(1) O(1)

Common Use Cases of Deque

  • Undo/Redo functionality – Stack behavior से implement किया जा सकता है।
  • Sliding Window Problems – Queue behavior के साथ fast operations।
  • Palindrome check – दोनों सिरों से elements compare करने में मदद।
  • Expression evaluation – Stack की तरह Deque use होती है।

Example Program – All Deque Operations Together


import java.util.*;

public class DequeExample {
    public static void main(String[] args) {
        Deque<Integer> dq = new ArrayDeque<>();

        dq.addFirst(10);
        dq.addLast(20);
        dq.addLast(30);

        System.out.println("Deque: " + dq);

        System.out.println("pollFirst(): " + dq.pollFirst());
        System.out.println("pollLast(): " + dq.pollLast());

        dq.addFirst(5);
        dq.addLast(40);

        System.out.println("peekFirst(): " + dq.peekFirst());
        System.out.println("peekLast(): " + dq.peekLast());

        System.out.println("Final Deque: " + dq);
    }
}

Output:


Deque: [10, 20, 30]
pollFirst(): 10
pollLast(): 30
peekFirst(): 5
peekLast(): 40
Final Deque: [5, 20, 40]

Important Points for Exam

  • Deque का मतलब है Double Ended Queue।
  • addFirst() – front पर add करता है।
  • addLast() – rear पर add करता है।
  • pollFirst() – front से remove करता है और element return करता है।
  • pollLast() – last से remove करता है।
  • peek() / peekFirst() / peekLast() – element को देखता है लेकिन remove नहीं करता।
  • Deque को Queue और Stack दोनों के रूप में इस्तेमाल किया जा सकता है।
  • Time complexity लगभग सभी operations के लिए O(1) रहती है।
  • ArrayDeque और LinkedList Deque की मुख्य implementations हैं।

Quick Notes (For Revision)

  • Primary Keyword: Deque Operations
  • Important Methods: addFirst(), addLast(), pollFirst(), pollLast(), peek()
  • Complexity: O(1)
  • Use As: Queue (FIFO), Stack (LIFO)
  • Package: java.util
  • Common Class: ArrayDeque