वास्तव में, यह केवल HashSet
नहीं है। सभी जावा 6 में Set
इंटरफेस के कार्यान्वयन अंतर्निहित Map
पर आधारित हैं। यह एक आवश्यकता नहीं है; यह कार्यान्वयन का तरीका है। आप Set
के विभिन्न कार्यान्वयन के लिए प्रलेखन की जांच करके स्वयं के लिए देख सकते हैं।
आपका मुख्य सवाल कर रहे हैं
लेकिन, क्यों यह अभी भी प्रयोग किया जाता है? क्या इसे कोड बनाए रखने के लिए आसान बनाने के अलावा इसका उपयोग करने का कोई कारण है?
मुझे लगता है कि कोड रखरखाव एक बड़ा प्रेरक कारक है। तो नकल और ब्लोट को रोक रहा है।
Set
और Map
समान इंटरफ़ेस हैं, उस डुप्लिकेट तत्वों की अनुमति नहीं है। (मुझे लगता है कि केवल Set
नहीं एक Map
द्वारा समर्थित CopyOnWriteArraySet
है, जो एक असामान्य संग्रह है, क्योंकि यह अपरिवर्तनीय है।)
विशेष रूप
:
documentation of Set
से:
एक संग्रह है कि इसमें डुप्लिकेट तत्व नहीं हैं। अधिक औपचारिक रूप से, सेट में तत्वों की कोई जोड़ी नहीं है e1 और e2 जैसे कि e1.equals (e2), और अधिकतर शून्य तत्व। जैसा कि द्वारा इसका नाम है, यह इंटरफ़ेस गणितीय सेट अबास्ट्रक्शन मॉडल करता है।
सेट इंटरफ़ेस अतिरिक्त शर्तों देता है, संग्रह इंटरफ़ेस से विरासत में मिला किए जाने के बावजूद, सभी निर्माताओं की ठेके पर और जोड़ने के ठेके पर, के बराबर होती है और hashCode तरीकों। अन्य विरासत विधियों के लिए घोषणा भी सुविधा के लिए यहां शामिल हैं। कंस्ट्रक्टर्स, है आश्चर्यजनक रूप से नहीं, कि सभी निर्माताओं के एक बनाना होगा पर ( विनिर्देशों इन घोषणाओं के साथ सेट इंटरफेस के अनुरूप किया गया है, लेकिन वे किसी भी अतिरिक्त शर्तों शामिल नहीं है।)
अतिरिक्त शर्त सेट जिसमें कोई डुप्लिकेट तत्व नहीं है (जैसा कि ऊपर परिभाषित किया गया है)।
और Map
से:
एक वस्तु है कि मूल्यों के लिए कुंजी मैप करता है। एक मानचित्र में डुप्लिकेट कुंजी नहीं हो सकती हैं; प्रत्येक कुंजी अधिकतम एक मूल्य पर मैप कर सकती है।
आप (, गति उदाहरण के लिए) मौजूदा कोड, कोई लाभ का उपयोग कर मौजूदा कोड के साथ-साथ अपने Set
को जमा कर लेता से आप महसूस कर सकते हैं अपने Set
रों को लागू कर सकते हैं।
यदि आप को Map
बैकिंग के बिना लागू करना चुनते हैं, तो आपको डुप्लिकेट तत्वों को रोकने के लिए डिज़ाइन किए गए कोड को डुप्लिकेट करना होगा। आह, स्वादिष्ट विडंबना।
यह कहा गया है कि, आपको Set
एस को अलग-अलग लागू करने से रोकने में कुछ भी नहीं है।
@yuku: डिफ़ॉल्ट जावा संग्रह में कचरे के स्तर डरावना है। जब आप प्राइमेटिव्स में हेरफेर करते हैं तो सबसे खराब अपराधी होते हैं। आपको लगता है कि हैशसेट
@yuku: मेरी टिप्पणी जारी रखने के लिए ... मेरा मतलब है: या तो perfs और मेमोरी पदार्थ और फिर आपको एक विकल्प खोजना होगा क्योंकि डिफ़ॉल्ट जावा संग्रह में अपशिष्ट का स्तर बहुत अधिक है या आपको इसकी आवश्यकता नहीं है perfs और memory कोई फर्क नहीं पड़ता, क्योंकि आप तत्वों की छोटी संख्या का उपयोग करेंगे और फिर डिफ़ॉल्ट जावा संग्रह ठीक हैं (मुश्किल है Google संग्रह आदि जैसे बेहतर विकल्प हैं) – SyntaxT3rr0r
@WizardOfOdds: यह बहुत सारे बोल्ड स्टेटमेंट्स हैं उन्हें वापस करने के लिए थोड़ा सबूत के साथ। – skaffman