हशसेट और सेट में क्या अंतर है?


जवाबों:


101

एक 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)


इसके अतिरिक्त, ये सामान्य-उद्देश्य-कार्यान्वयन हैं: लिंक्डहैशसेट (हैशसेट का एक प्रकार जो Iterator के लिए कुछ ऑर्डर को संरक्षित करता है), समवर्तीSkipListSet (एक थ्रेडसेव सॉर्ट किए गए कार्यान्वयन), CopyOnWriteArraySet (एक थ्रेड-सुरक्षित संस्करण, जो बहुत सारे रीड के लिए अनुकूलित है) लिखते हैं "), EnumSet (जो तत्वों के लिए केवल enum प्रकारों पर काम करता है, लेकिन फिर HashSet से भी तेज है)।
पाओलो एबरमन

7
@ एरिक: मैं आपके उत्तर को संपादित करने का अनुरोध करता हूं। ट्रीसेट को क्रमबद्ध नहीं किया गया है। HashSet = अनियंत्रित, ट्रीसेट = सॉर्ट किया गया, LinkedHashSet = ऑर्डर किया गया। कृपया अपने उत्तर को तदनुसार संशोधित करें
रईस आलम

अगर हैशकोड का कार्यान्वयन खराब है (जैसे हमेशा एक ही
हैशकोड लौटाते हैं

35

का HashSetकार्यान्वयन है Set


14
मुझे यह टिप्पणी समझ में नहीं आती। सवाल यह है कि "क्या अंतर है" और "क्या रिश्ता है" नहीं।
जैमबॉक्स

8
उन्होंने अंतर को समझाया, सेट इंटरफ़ेस है, हाशसेट उस इंटरफ़ेस का कार्यान्वयन है। इसलिए वे अलग-अलग कार्यान्वयन नहीं हैं, बस हैसेट सेट के कार्यान्वयन में से एक है (अन्य कार्यान्वयन ट्रीसेट है)।
एग्जीडेव

मेरे लिए एक मान्य उत्तर की तरह लगता है
रोमेन हाउटफ्यूइल

3
आपको छोड़ दिया क्योंकि आप इस सवाल का जवाब नहीं दिया। भविष्य में मैं आपको कुछ प्रलेखन, उदाहरण और तुलना जोड़ने की सलाह देता हूं। केवल एक ही वाक्य लिखना, और अधिकांश सामग्री सिर्फ कहीं और के लिए लिंक है, यह नहीं है कि आप स्टैक ओवरफ्लो पर प्रश्नों का उत्तर कैसे देते हैं।
उरेडा

इस सवाल का जवाब दिया गया है, 6 साल पहले, (ऊपर देखें) लेकिन धन्यवाद।
विघ्नम

16

इस सवाल का जवाब दिया गया है, लेकिन मैंने इस सवाल का जवाब नहीं देखा कि क्यों कोड एक ही कोड में दोनों प्रकारों का उल्लेख करता है।

आमतौर पर, आप इंटरफेस के खिलाफ कोड बनाना चाहते हैं जो इस मामले में सेट है। क्यों? क्योंकि यदि आप हमेशा (नए हैशसेट () को छोड़कर) इंटरफेस के माध्यम से अपनी वस्तु का संदर्भ लेते हैं तो बाद में ऑब्जेक्ट के कार्यान्वयन को बदलना तुच्छ है यदि आपको लगता है कि ऐसा करना बेहतर होगा क्योंकि आपने केवल एक बार अपने कोड में इसका उल्लेख किया है आधार (जहाँ आपने नया हैशसेट () किया था)।


14

सेट एक संग्रह है जिसमें कोई डुप्लिकेट तत्व नहीं हैं। सेट एक इंटरफ़ेस है।

हैशसेटSet इंटरफ़ेस को लागू करता है, जो हैश टेबल (वास्तव में एक HashMapउदाहरण) द्वारा समर्थित है ।

चूंकि इंटरफ़ेस HashSetके विशिष्ट कार्यान्वयन में से एक Setहै।

एक Setनिम्नलिखित के बाद से यह कक्षाएं नीचे से लागू किया गया था के किसी भी हो सकता है

समवर्ती SkipListSet: एक स्केलेबल समवर्ती NavigableSet कार्यान्वयन a पर आधारित है ConcurrentSkipListMap। सेट के तत्वों को उनके प्राकृतिक क्रम के अनुसार, या Comparatorसेट निर्माण समय पर प्रदान किया जाता है, जिसके आधार पर कंस्ट्रक्टर का उपयोग किया जाता है।

CopyOnWriteArraySet : एक सेट जो अपने सभी कार्यों के लिए एक आंतरिक CopyOnWriteArrayList का उपयोग करता है।

EnumSet : Enum प्रकार के साथ उपयोग के लिए एक विशेष सेट कार्यान्वयन। एक एनुम सेट के सभी तत्व एकल एनम प्रकार से आने चाहिए जो निर्दिष्ट, स्पष्ट रूप से या अंतर्निहित रूप से, जब सेट बनाया जाता है।

ट्रीसेट : ट्रीपेज पर आधारित एक नेविगेबल सेटटैशन। तत्वों को उनके प्राकृतिक ऑर्डरिंग का उपयोग करने का आदेश दिया जाता है, या सेट निर्माण समय पर प्रदान किए गए एक तुलनित्र द्वारा, जिसके आधार पर कंस्ट्रक्टर का उपयोग किया जाता है।

लिंक्डहैसेट : एसे टेबल और सेट इट इंटरफेस की लिंक्ड लिस्ट कार्यान्वयन, प्रेडिक्टेबल इटरेशन ऑर्डर के साथ। यह कार्यान्वयन हैशसेट से इस मायने में भिन्न है कि यह अपनी सभी प्रविष्टियों के माध्यम से चलने वाली दोहरी-लिंक की गई सूची को बनाए रखता है।

लेकिन HashSetकेवल उपवर्गों LinkedHashSetसे ही हो सकता हैLinkedHashSetHashSet


8

सेट-सेट संग्रह के लिए सामान्य इंटरफ़ेस सेट है, जबकि हैशसेट सेट इंटरफ़ेस का एक विशिष्ट कार्यान्वयन है (जो हैश कोड का उपयोग करता है, इसलिए नाम)।


2

सेट ट्रीसेट, लिंक्डहैशसेट आदि जैसे सभी सेट वर्गों का एक मूल इंटरफ़ेस है।

हैशसेट एक वर्ग है जो सेट इंटरफ़ेस लागू करता है।


0

हैशसेट एक वर्ग है जो सेट इंटरफेस से लिया गया है। सेट के एक व्युत्पन्न वर्ग के रूप में, हैसेट सेट के गुणों को प्राप्त करता है। सेट के महत्वपूर्ण और सबसे अधिक बार उपयोग किए जाने वाले वर्ग हैशसेट और ट्रीसेट हैं।


-1

**

  • सेट:

** यह एक इंटरफ़ेस है जो LIST और QUEUE की तरह कलेक्शन इंटरफेस का एक उपप्रकार है।

सेट के नीचे 3 उपवर्ग होते हैं, इसका उपयोग डुप्लिकेट के बिना कई वस्तुओं को संग्रहीत करने के लिए किया जाता है।

  1. हैशसेट
  2. लिंक्ड हैशसेट
  3. ट्रीसेट (जो छांटता है सॉर्टसेट इंटरफ़ेस)

**

  • हैशसेट:

**

एक पूर्ण मान का उपयोग कर सकते हैं (जैसा कि डुप्लिकेट की अनुमति नहीं है), डेटा यादृच्छिक रूप से संग्रहीत किया जाता है क्योंकि यह अनुक्रम बनाए नहीं रखता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.