Java Notes
Learn the Java Deque interface from scratch — what double-ended queue means, all methods explained, using Deque as stack and queue, method differences, and when to use which implementation.
Ek normal queue sirf ek taraf se kaam karta hai — peeche se elements add hote hain, aage se nikalte hain. Ek normal stack bhi ek taraf se kaam karta hai — upar se add, upar se nikalo.
Deque (Double-Ended Queue) dono se zyada powerful hai — tum elements ko dono taraf se add ya remove kar sakte ho. Ek hi structure stack bhi ban sakta hai, queue bhi, aur aisa kuch bhi jo dono ends pe fast operation chahiye.
"Deque" pronounce hota hai "deck" — jaise taash ki deck.
Deque Interface kya define karta hai?
Deque ek interface hai — ye sirf define karta hai ki kya-kya karna hona chahiye. Implementation nahi karta. Ye extend karta hai Queue ko, aur Queue extend karta hai Collection ko.
Do common implementations hain:
ArrayDeque— array-backed, faster, preferred choiceLinkedList— node-based, slower, lekin null elements allow karta hai
Deque ke Methods — Dono Ends ke Liye
Deque ke methods padhke confuse ho jaate hain kyunki har kaam ke liye do method hote hain — ek jo exception throw karta hai, ek jo null/false return karta hai. Pehle ye samjho:
Aage (Front/First) ke methods:
Try it in WoHoCode
Edit the program, then run it here.
Run this example to see its output.
Har method ka matlab:
addFirst()vsofferFirst()— dono aage se add karte hain. Fark: queue full hone paraddFirst()exception throw karta hai,offerFirst()falsereturn karta hai. ArrayDeque ke liye koi fark nahi (kabhi full nahi hoti), butBlockingDequejaisi bounded deques mein matter karta hai.getFirst()vspeekFirst()— dono aage wala dekhte hain. Fark: deque empty ho togetFirst()exception,peekFirst()null return karta hai.removeFirst()vspollFirst()— dono aage se nikalte hain. Fark: empty deque parremoveFirst()exception,pollFirst()null.
Peeche (Back/Last) ke methods:
Try it in WoHoCode
Edit the program, then run it here.
Run this example to see its output.
Deque as Stack — Stack ke Methods
Jab Deque ko Stack ki tarah use karte ho, Java ne shortcut methods diye hain:
Try it in WoHoCode
Edit the program, then run it here.
Run this example to see its output.
push(), pop(), peek() — ye sirf shortcuts hain addFirst(), removeFirst(), peekFirst() ke. Koi naya concept nahi — bas yaad rakhna asaan hai.
Deque as Queue — Queue ke Methods
Try it in WoHoCode
Edit the program, then run it here.
Run this example to see its output.
offer(), poll(), peek() — Queue ke standard methods. Ye Queue interface se aate hain jo Deque extend karta hai.
Dono Ends Simultaneously Use Karna
Ye Deque ki asli power hai — ek hi structure mein dono ends pe kaam karna:
Try it in WoHoCode
Edit the program, then run it here.
Run this example to see its output.
Algorithm samjho:
- "racecar" = [r, a, c, e, c, a, r]
- Round 1: front='r', back='r' — match, size becomes 5
- Round 2: front='a', back='a' — match, size becomes 3
- Round 3: front='c', back='c' — match, size becomes 1
- 1 element bacha (middle 'e') — loop rok do, palindrome hai
Saare Methods Ek Table Mein
| Kaam | Exception version | Safe version (null/false) |
|---|---|---|
| Aage add | addFirst(e) | offerFirst(e) |
| Peeche add | addLast(e) | offerLast(e) |
| Aage dekho | getFirst() | peekFirst() |
| Peeche dekho | getLast() | peekLast() |
| Aage nikalo | removeFirst() | pollFirst() |
| Peeche nikalo | removeLast() | pollLast() |
| Stack push | push(e) = addFirst | — |
| Stack pop | pop() = removeFirst | — |
| Stack peek | peek() = peekFirst | — |
| Queue offer | — | offer(e) = offerLast |
| Queue poll | — | poll() = pollFirst |
| Queue peek | — | peek() = peekFirst |
ArrayDeque vs LinkedList as Deque
Try it in WoHoCode
Edit the program, then run it here.
Run this example to see its output.
ArrayDeque kyon prefer karein:
- Faster hai — array-backed, CPU cache friendly
- Koi null nahi chahiye to ArrayDeque best choice
LinkedList kyon use karein:
- Null elements store karne hain
- Already LinkedList hai codebase mein aur Deque features bhi chahiye
Common Mistake 1: peek() Samjhna Ki Element Nikalta Hai
Deque<Integer> deque = new ArrayDeque<>();
deque.push(10);
deque.push(20);
deque.push(30);
System.out.println(deque.peek()); // 30 — sirf dekha
System.out.println(deque.size()); // 3 — kuch nahi nikla!
// Sirf pop() nikalega:
System.out.println(deque.pop()); // 30 — ab nikla
System.out.println(deque.size()); // 2peek() sirf top element dikhata hai, nikalata nahi. Students aksar confuse ho jaate hain aur sochte hain element nikal gaya.
Common Mistake 2: Empty Deque Par remove/get Call Karna
Deque<String> deque = new ArrayDeque<>();
// WRONG — NoSuchElementException
// deque.removeFirst();
// deque.getFirst();
// CORRECT — pehle check karo
if (!deque.isEmpty()) {
deque.removeFirst();
}
// Ya safe versions use karo jo null return karte hain:
String val = deque.pollFirst(); // null agar empty
String top = deque.peekFirst(); // null agar emptyPractice Task
Task: Browser ka back/forward history system banao using do Deque<String>. Rules:
- Nayi page visit karo: current page ko backStack mein push karo, forwardStack clear karo
- Back karo: current page forwardStack mein push karo, backStack se pop karo
- Forward karo: current page backStack mein push karo, forwardStack se pop karo
Pages: Home → About → Java → OOPs → (back) → (back) → (forward) → Collections
Hint: backStack.push(current) aur current = forwardStack.pop() pattern.
Solution:
Try it in WoHoCode
Edit the program, then run it here.
Run this example to see its output.
Kya observe karo: visit("Collections") ke baad forward() karne par "kuch nahi hai" print hoga — kyunki nayi page visit karne par forwardStack clear ho jaati hai. Yahi real browser ka behaviour hai. back() do baar karne ke baad tum "About" par ho. Ek forward() "Java" pe le jaata hai.
Continue the lesson path