जैसे कोड स्निपेट देखा
Set<Record> instances = new HashSet<Record>();
मैं सोच रहा हूं कि क्या हैशसेट एक खास तरह का सेट है। उनके बीच कोई अंतर?
जैसे कोड स्निपेट देखा
Set<Record> instances = new HashSet<Record>();
मैं सोच रहा हूं कि क्या हैशसेट एक खास तरह का सेट है। उनके बीच कोई अंतर?
जवाबों:
एक Setसामान्य "मूल्यों के सेट" का प्रतिनिधित्व करता है। एक TreeSetऐसा सेट है जहां तत्वों को क्रमबद्ध किया जाता है (और इस प्रकार आदेश दिया जाता है), एक HashSetऐसा सेट है जहां तत्वों को क्रमबद्ध या ऑर्डर नहीं किया जाता है।
A HashSetआमतौर पर बहुत तेजी से होता है TreeSet।
एक TreeSetआम तौर पर एक लाल-काले वृक्ष के रूप में कार्यान्वित किया जाता है (देखें http://en.wikipedia.org/wiki/Red-black_tree - मैं सूरज / दैवज्ञ की की वास्तविक क्रियान्वयन मान्य नहीं किया गया है TreeSet), एक जबकि HashSetउपयोगों Object.hashCode()में एक सूचकांक बनाने के लिए एक सरणी। लाल-काले पेड़ के लिए O(log(n))पहुंच का समय है, जबकि HashSetनिरंतर-समय से लेकर सबसे खराब स्थिति (हर आइटम में एक ही हैशकोड) तक पहुंच का समय है जहां आपके पास एक रेखीय खोज समय हो सकता है O(n)।
इस सवाल का जवाब दिया गया है, लेकिन मैंने इस सवाल का जवाब नहीं देखा कि क्यों कोड एक ही कोड में दोनों प्रकारों का उल्लेख करता है।
आमतौर पर, आप इंटरफेस के खिलाफ कोड बनाना चाहते हैं जो इस मामले में सेट है। क्यों? क्योंकि यदि आप हमेशा (नए हैशसेट () को छोड़कर) इंटरफेस के माध्यम से अपनी वस्तु का संदर्भ लेते हैं तो बाद में ऑब्जेक्ट के कार्यान्वयन को बदलना तुच्छ है यदि आपको लगता है कि ऐसा करना बेहतर होगा क्योंकि आपने केवल एक बार अपने कोड में इसका उल्लेख किया है आधार (जहाँ आपने नया हैशसेट () किया था)।
सेट एक संग्रह है जिसमें कोई डुप्लिकेट तत्व नहीं हैं। सेट एक इंटरफ़ेस है।
हैशसेटSet इंटरफ़ेस को लागू करता है, जो हैश टेबल (वास्तव में एक HashMapउदाहरण) द्वारा समर्थित है ।
चूंकि इंटरफ़ेस HashSetके विशिष्ट कार्यान्वयन में से एक Setहै।
एक Setनिम्नलिखित के बाद से यह कक्षाएं नीचे से लागू किया गया था के किसी भी हो सकता है
समवर्ती SkipListSet: एक स्केलेबल समवर्ती NavigableSet कार्यान्वयन a पर आधारित है ConcurrentSkipListMap। सेट के तत्वों को उनके प्राकृतिक क्रम के अनुसार, या Comparatorसेट निर्माण समय पर प्रदान किया जाता है, जिसके आधार पर कंस्ट्रक्टर का उपयोग किया जाता है।
CopyOnWriteArraySet : एक सेट जो अपने सभी कार्यों के लिए एक आंतरिक CopyOnWriteArrayList का उपयोग करता है।
EnumSet : Enum प्रकार के साथ उपयोग के लिए एक विशेष सेट कार्यान्वयन। एक एनुम सेट के सभी तत्व एकल एनम प्रकार से आने चाहिए जो निर्दिष्ट, स्पष्ट रूप से या अंतर्निहित रूप से, जब सेट बनाया जाता है।
ट्रीसेट : ट्रीपेज पर आधारित एक नेविगेबल सेटटैशन। तत्वों को उनके प्राकृतिक ऑर्डरिंग का उपयोग करने का आदेश दिया जाता है, या सेट निर्माण समय पर प्रदान किए गए एक तुलनित्र द्वारा, जिसके आधार पर कंस्ट्रक्टर का उपयोग किया जाता है।
लिंक्डहैसेट : एसे टेबल और सेट इट इंटरफेस की लिंक्ड लिस्ट कार्यान्वयन, प्रेडिक्टेबल इटरेशन ऑर्डर के साथ। यह कार्यान्वयन हैशसेट से इस मायने में भिन्न है कि यह अपनी सभी प्रविष्टियों के माध्यम से चलने वाली दोहरी-लिंक की गई सूची को बनाए रखता है।
लेकिन HashSetकेवल उपवर्गों LinkedHashSetसे ही हो सकता हैLinkedHashSetHashSet
हैशसेट एक वर्ग है जो सेट इंटरफेस से लिया गया है। सेट के एक व्युत्पन्न वर्ग के रूप में, हैसेट सेट के गुणों को प्राप्त करता है। सेट के महत्वपूर्ण और सबसे अधिक बार उपयोग किए जाने वाले वर्ग हैशसेट और ट्रीसेट हैं।
**
** यह एक इंटरफ़ेस है जो LIST और QUEUE की तरह कलेक्शन इंटरफेस का एक उपप्रकार है।
सेट के नीचे 3 उपवर्ग होते हैं, इसका उपयोग डुप्लिकेट के बिना कई वस्तुओं को संग्रहीत करने के लिए किया जाता है।
**
**
एक पूर्ण मान का उपयोग कर सकते हैं (जैसा कि डुप्लिकेट की अनुमति नहीं है), डेटा यादृच्छिक रूप से संग्रहीत किया जाता है क्योंकि यह अनुक्रम बनाए नहीं रखता है।