Using ArrayDeque as Stack and Queue: Official Java Recommendation
Using ArrayDeque as Stack and Queue: Official Java Recommendation
Using ArrayDeque as Stack and Queue क्या है?
Java में ArrayDeque एक बहुत ही powerful और flexible class है जो Stack और Queue दोनों की तरह काम कर सकती है। यह class java.util package में आती है और इसे Java ने officially recommend किया है जब हमें Stack या Queue की functionality चाहिए होती है।
कई बार exam या interview में पूछा जाता है कि “Why ArrayDeque is recommended over Stack or LinkedList?” — तो इसका simple answer है: क्योंकि ArrayDeque fast है, memory efficient है, और thread-safety के बिना situations में best performance देता है।
Introduction to ArrayDeque
ArrayDeque का मतलब है “Array-based Double Ended Queue”। इसका अर्थ है कि elements को दोनों तरफ से add या remove किया जा सकता है — front और rear दोनों से। यही reason है कि इसे Stack (LIFO) और Queue (FIFO) दोनों के लिए use किया जा सकता है।
यह internally dynamic array पर काम करता है जो जरूरत पड़ने पर अपने size को increase करता है। इसमें null elements allow नहीं होते।
ArrayDeque की Main Features
- यह Resizable Array पर आधारित होता है।
- Null elements को store नहीं कर सकता।
- Thread-safe नहीं है (लेकिन single-thread use में बहुत fast है)।
- Insertion और Removal operations constant time (O(1)) में होते हैं।
- इसमें elements को दोनों सिरों से जोड़ा या हटाया जा सकता है।
Using ArrayDeque as Stack (LIFO Structure)
Stack का principle होता है — Last In, First Out (LIFO), यानी जो element सबसे आखिरी में डाला गया है, वही सबसे पहले निकलेगा।
ArrayDeque में Stack operations perform करने के लिए push() और pop() methods का use किया जाता है।
Example: Using ArrayDeque as Stack
import java.util.*;
public class StackExample {
public static void main(String[] args) {
ArrayDeque<Integer> stack = new ArrayDeque<>();
stack.push(10);
stack.push(20);
stack.push(30);
System.out.println("Top Element: " + stack.peek()); // 30
System.out.println("Removed Element: " + stack.pop()); // 30
System.out.println("After Pop: " + stack);
}
}
Output:
Top Element: 30
Removed Element: 30
After Pop: [10, 20]
यहाँ push() method element को top पर add करता है और pop() उसे remove करता है। peek() method top element को return करता है लेकिन remove नहीं करता।
Stack Related Methods in ArrayDeque
| Method | Description |
|---|---|
push(E e) | Stack के top पर element insert करता है। |
pop() | Top element को remove करता है और return करता है। |
peek() | Top element को return करता है बिना remove किए। |
isEmpty() | Check करता है कि stack खाली है या नहीं। |
Using ArrayDeque as Queue (FIFO Structure)
Queue का principle होता है — First In, First Out (FIFO), यानी जो element सबसे पहले डाला गया है, वही सबसे पहले निकलेगा।
ArrayDeque को Queue की तरह use करने के लिए offer(), poll(), और peek() methods का use होता है।
Example: Using ArrayDeque as Queue
import java.util.*;
public class QueueExample {
public static void main(String[] args) {
ArrayDeque<String> queue = new ArrayDeque<>();
queue.offer("A");
queue.offer("B");
queue.offer("C");
System.out.println("Front Element: " + queue.peek());
System.out.println("Removed: " + queue.poll());
System.out.println("After Poll: " + queue);
}
}
Output:
Front Element: A
Removed: A
After Poll: [B, C]
Queue Related Methods in ArrayDeque
| Method | Description |
|---|---|
offer(E e) | Queue के end में element add करता है। |
poll() | Queue के front element को remove करता है और return करता है। |
peek() | Queue के front element को return करता है बिना remove किए। |
isEmpty() | Check करता है कि queue खाली है या नहीं। |
Official Java Recommendation
Java documentation के अनुसार, ArrayDeque को Stack और Queue दोनों implementations के लिए recommend किया गया है।
Official Java Docs में साफ लिखा गया है कि:
“This class is likely to be faster than Stack when used as a stack, and faster than LinkedList when used as a queue.”
इसका मतलब यह हुआ कि अगर हमें Stack के लिए traditional Stack class या Queue के लिए LinkedList का use करने का option मिले, तो Java recommend करता है कि उसकी जगह ArrayDeque use करें क्योंकि:
- यह lock-free operations provide करता है।
- Memory allocation efficient होती है।
- Garbage collection कम होता है क्योंकि intermediate nodes नहीं होते।
- Performance अधिक होती है क्योंकि internal array का use होता है।
ArrayDeque vs Stack vs LinkedList
| Feature | ArrayDeque | Stack | LinkedList |
|---|---|---|---|
| Performance | Fastest | Slower (synchronized) | Moderate |
| Thread-Safety | No | Yes | No |
| Use Case | Best for Stack & Queue | Only Stack | Queue & List |
| Null Elements | Not allowed | Allowed | Allowed |
| Internal Structure | Resizable Array | Vector | Doubly Linked List |
| Recommendation | Officially Recommended | Legacy | Not Preferred |
Real World Uses of ArrayDeque
ArrayDeque का use कई real-world programs और algorithms में किया जाता है, जैसे:
- Expression Evaluation — Stack की तरह operators और operands को manage करने में।
- Undo/Redo Operations — recent actions को Stack की तरह store करने में।
- BFS Algorithm — Queue की तरह nodes को traverse करने में।
- Sliding Window Problems — दोनों सिरों से elements को handle करने में।
Internal Working of ArrayDeque
ArrayDeque internally एक circular array का use करता है। जब array का end reach हो जाता है, तो अगला element automatically starting index पर place होता है। इससे memory का efficient use होता है।
जब capacity भर जाती है, तो array का size दोगुना कर दिया जाता है। इस process को “Dynamic Resizing” कहते हैं।
When to Use ArrayDeque
अगर आपको ऐसा data structure चाहिए जिसमें elements को दोनों सिरों से efficiently handle किया जा सके — यानी कभी Stack behavior चाहिए तो कभी Queue behavior — तो ArrayDeque best choice है।
- जब frequent insertion और deletion दोनों सिरों से करनी हो।
- जब thread-safety की जरूरत न हो।
- जब high performance चाहिए हो।
Limitations of ArrayDeque
- यह thread-safe नहीं है, इसलिए multithreading environment में
ConcurrentLinkedDequeबेहतर option है। - यह null elements को support नहीं करता।
- Size को manually limit नहीं किया जा सकता।
Key Points to Remember
ArrayDequeStack और Queue दोनों का replacement है।- यह Java द्वारा officially recommend किया गया modern alternative है।
- Fast, Memory-efficient, और Resizable है।
- Null values store नहीं कर सकता।
- Thread-safe नहीं है, लेकिन single-thread में सबसे efficient है।
Exam-Oriented Notes
- Primary Keyword: Using ArrayDeque as Stack and Queue
- Definition: ArrayDeque is a resizable array-based data structure that can work as both Stack and Queue.
- Java Official Recommendation: Prefer ArrayDeque over Stack and LinkedList for better performance.
- Stack Methods: push(), pop(), peek()
- Queue Methods: offer(), poll(), peek()
- Time Complexity: O(1) for insertion and removal
- Not Allowed: Null elements
- Use Case: BFS, Undo/Redo, Expression Evaluation
- Internal Structure: Circular Resizable Array