Java Notes
Learn Java TreeSet from scratch — what sorted unique storage means, how TreeSet compares elements, all navigation methods explained, custom ordering, and when to choose TreeSet.
Socho tumhare paas students ke roll numbers hain — aur tum chahte ho ki:
- Koi duplicate na ho (same roll number twice nahi)
- Hamesha sorted order mein rahen (chaahe kisi bhi order mein add karo)
- Jaldi check kar sako ki koi number range mein hai ya nahi
Yahi kaam TreeSet karta hai. Ye ek aise cabinet ki tarah hai jo automatically alphabetically ya numerically sort karke rakhta hai, aur duplicate entry reject kar deta hai.
TreeSet kya hai aur kaise kaam karta hai?
Internally TreeSet ek Red-Black Tree use karta hai — ye ek self-balancing binary search tree hai. Iska matlab:
- Har nayi value add karne par tree khud ko balance karta hai
contains(),add(),remove()— teeno O(log n) mein hote hain- Iteration hamesha sorted order mein hoti hai
HashSet se difference: HashSet mein order guaranteed nahi. TreeSet mein hamesha sorted order guaranteed hai.
null allowed nahi: TreeSet ko elements compare karne padte hain ordering ke liye. null ko compare nahi kar sakte, isliye NullPointerException aata hai.
Basic Usage — Automatic Sort
Try it in WoHoCode
Edit the program, then run it here.
Run this example to see its output.
Har line ka matlab:
rollNumbers.add(101)doosri baar —add()falsereturn karta hai (duplicate reject) lekin koi error nahi aata. Set unchanged rehta hai.rollNumbers.size()— 4 hai, 5 nahi. Duplicate count nahi hota.- Print karo to hamesha sorted order mein aata hai — chahe kisi bhi sequence mein add kiya ho.
Navigation Methods — Range Queries
Ye TreeSet ki sabse powerful feature hai. Tum specifically pooch sakte ho: "25 se chhota kaun sa element hai?" ya "50 aur 80 ke beech kya hai?"
Try it in WoHoCode
Edit the program, then run it here.
Run this example to see its output.
In methods ka practical use kaha aata hai?
- Database-style range queries bina database ke
- Binary search ki jagah (floor/ceiling khud binary search jaisa kaam karta hai)
- "Is number ke aas-paas kya hai?" — jaise stock prices, scores
Range Views — headSet, tailSet, subSet
Try it in WoHoCode
Edit the program, then run it here.
Run this example to see its output.
headSet, tailSet, subSet kyon use karein?
Ye "views" hain — matlab ye original TreeSet ka hi hissa dikhate hain, copy nahi karte. Bahut memory efficient hain. Agar tum range view mein kuch change karo, original TreeSet mein bhi change hoga.
Strings ke saath TreeSet — Alphabetical Order
Integers ke liye numeric order, Strings ke liye alphabetical order:
Try it in WoHoCode
Edit the program, then run it here.
Run this example to see its output.
Custom Objects ke saath TreeSet — Comparator zaroori
Agar apna class store karna hai TreeSet mein, to Java ko batana padega ki elements ko kaise compare karein. Ya class Comparable implement kare, ya TreeSet ko Comparator do.
Try it in WoHoCode
Edit the program, then run it here.
Run this example to see its output.
Agar Comparator nahi diya: ClassCastException aayega jab pehla element add hoga — kyunki Java koshish karega Student ko Comparable mein cast karne ki aur fail hoga.
TreeSet vs HashSet vs LinkedHashSet
Try it in WoHoCode
Edit the program, then run it here.
Run this example to see its output.
| HashSet | LinkedHashSet | TreeSet | |
|---|---|---|---|
| Order | Koi nahi | Insertion order | Sorted (natural/custom) |
| Duplicates | Nahi | Nahi | Nahi |
| Speed (add/contains) | O(1) — fastest | O(1) | O(log n) — thoda slow |
| Null allow | Haan (ek) | Haan (ek) | Nahi |
| Range queries | Nahi | Nahi | Haan — powerful |
Kab kya use karein:
- Sirf uniqueness chahiye, order nahi →
HashSet - Uniqueness + insertion order →
LinkedHashSet - Uniqueness + sorted order + range queries →
TreeSet
Common Mistake 1: null add karna
TreeSet<String> set = new TreeSet<>();
set.add("Asha");
set.add(null); // NullPointerException
// Fix: Null ko add karne ki zaroorat hai?
// Agar haan to LinkedHashSet ya HashSet use karo
// Warna null check pehle karo
if (element != null) set.add(element);Common Mistake 2: Custom class bina Comparator/Comparable ke
// WRONG — ClassCastException aayega
TreeSet<Student> set = new TreeSet<>(); // no comparator
set.add(new Student("Asha", 101)); // pehla add OK
set.add(new Student("Ravi", 102)); // CRASH — Java cannot compare Students
// CORRECT — Comparator do
TreeSet<Student> set = new TreeSet<>(Comparator.comparingInt(s -> s.rollNo));Common Mistake 3: headSet mein boundary inclusive samajhna
headSet(value) default mein value ko exclude karta hai. Inclusive chahiye to headSet(value, true) use karo.
Practice Task
Task: Ek TreeSet<String> banao jisme student names store karo. 6 names add karo — 2 duplicate bhi. Phir:
- Sabse pehla aur sabse aakhri name alphabetically print karo
- "M" se pehle wale saare names print karo
- "M" ke baad wale saare names print karo
- Koi specific name hai ya nahi check karo
Hint: first(), last(), headSet("M"), tailSet("M"), contains() use karo.
Solution:
Try it in WoHoCode
Edit the program, then run it here.
Run this example to see its output.
Kya observe karo: "Asha" doosri baar add ki — size 5 raha, 6 nahi hua. headSet("M") ne "M" nahi rakha — strictly before "M". Try karo names.add("Manu") — ye tailSet("M") mein aayega. TreeSet ke saath kabhi sort karna nahi padta — ye automatically hota hai.
Continue the lesson path