HashSet vs TreeSet
दो तरह के Set
HashSet और TreeSet दोनों Sets हैं — सिर्फ़ unique items store करती हैं — पर बड़ा अंतर order है। HashSet कोई order नहीं रखती और तेज़ है; TreeSet items को अपने-आप sorted रखती है पर थोड़ी धीमी है। आप इस आधार पर चुनते हैं कि sorting चाहिए या नहीं।
HashSet
import java.util.HashSet; HashSet<Integer> set = new HashSet<>(); set.add(30); set.add(10); set.add(20); set.add(10); // duplicate अनदेखा System.out.println(set); // order पक्का नहीं
HashSet unique items बिना पक्के order store करती है, जो add, remove और contains को बहुत तेज़ बनाता है। तब इस्तेमाल कीजिए जब आपको सिर्फ़ uniqueness और speed चाहिए।
TreeSet
import java.util.TreeSet; TreeSet<Integer> set = new TreeSet<>(); set.add(30); set.add(10); set.add(20); System.out.println(set); // अपने-आप sorted
TreeSet items को अपने-आप sorted order में रखती है। 30, 10, 20 जोड़ने पर वे 10, 20, 30 के रूप में वापस मिलते हैं। जब आपको sorted रहने वाला set चाहिए तब यह विकल्प है।
Order सबसे बड़ा अंतर
- HashSet — कोई order नहीं; items किसी भी व्यवस्था में दिख सकते हैं।
- TreeSet — natural sorted order (numbers बढ़ते, strings A-Z)।
- LinkedHashSet — तीसरा विकल्प जो insertion order रखता है।
अगर order मायने न रखे, HashSet सबसे अच्छी। sorting चाहिए तो TreeSet इस्तेमाल कीजिए।
Performance और nulls
- Speed: HashSet तेज़ (लगभग constant time); TreeSet धीमी (sorting रखती है)।
- Null: HashSet एक null allow करती है; TreeSet कोई नहीं (sort को तुलना करनी पड़ती है)।
- ज़रूरत: TreeSet elements comparable होने चाहिए।
तुलना
| बात | HashSet | TreeSet |
|---|---|---|
| Unique items | हाँ | हाँ |
| Order | कोई नहीं | Sorted |
| Speed | तेज़ | धीमी |
| Null allowed | एक | कोई नहीं |
| किसके लिए | Speed, uniqueness | Sorted unique data |
आम गलतियाँ
- HashSet से order की उम्मीद। इसमें कोई नहीं — TreeSet या LinkedHashSet इस्तेमाल कीजिए।
- TreeSet में null जोड़ना। यह NullPointerException देती है।
- Order न चाहिए तब TreeSet इस्तेमाल करना। HashSet तेज़ है।
- TreeSet में non-comparable elements। वे comparable होने चाहिए, या Comparator दीजिए।
सारांश
- दोनों सिर्फ़ unique items store करती हैं।
- HashSet का कोई order नहीं और तेज़ है।
- TreeSet items sorted रखती है पर धीमी है।
- HashSet एक null allow करती है; TreeSet कोई नहीं।
- Speed को HashSet, sorted data को TreeSet, insertion order को LinkedHashSet इस्तेमाल कीजिए।
आगे, sets दोहराइए Collections Framework में, या sorting नियम सीखिए Comparable vs Comparator से।
