HashSet C # HashSet डेटा संरचना .NET फ्रेमवर्क 3.5 में पेश की गई थी। कार्यान्वित सदस्यों की पूरी सूची HashSet MSDN पृष्ठ पर देखी जा सकती है ।
- इसका उपयोग कहां किया जाता है?
- आप इसका उपयोग क्यों करना चाहेंगे?
HashSet C # HashSet डेटा संरचना .NET फ्रेमवर्क 3.5 में पेश की गई थी। कार्यान्वित सदस्यों की पूरी सूची HashSet MSDN पृष्ठ पर देखी जा सकती है ।
जवाबों:
एक HashSet
ऑब्जेक्ट का एक सेट रखता है, लेकिन एक तरह से यह आपको आसानी से और जल्दी से यह निर्धारित करने की अनुमति देता है कि कोई वस्तु पहले से ही सेट में है या नहीं। यह एक सरणी को आंतरिक रूप से प्रबंधित करके और एक इंडेक्स का उपयोग करके ऑब्जेक्ट को संग्रहीत करता है जिसे ऑब्जेक्ट के हैशकोड से गणना की जाती है। यहाँ एक नज़र रखना
HashSet
अद्वितीय तत्वों से युक्त एक अनियंत्रित संग्रह है। इसमें मानक संग्रह ऑपरेशन जोड़ें, निकालें, शामिल हैं, लेकिन चूंकि यह हैश-आधारित कार्यान्वयन का उपयोग करता है, ये ऑपरेशन O (1) हैं। (उदाहरण के लिए सूची के विपरीत, जो कि ओ (एन) है जिसमें कंटेंस और निकालें हैं।) यूनियन , चौराहे और सममित अंतरHashSet
जैसे मानक सेट संचालन भी प्रदान करता है । यहाँ एक नज़र रखना
सेट्स के अलग-अलग कार्यान्वयन हैं। कुछ सम्मिलन और लुकअप ऑपरेशन को हैशिंग तत्वों द्वारा सुपर फास्ट बनाते हैं। हालांकि, इसका मतलब है कि तत्वों को जोड़ने का क्रम खो गया है। अन्य कार्यान्वयन धीमी गति से चलने वाले समय की लागत पर अतिरिक्त आदेश को संरक्षित करते हैं।
HashSet
सी # में वर्ग पहले दृष्टिकोण के लिए चला जाता है, इस प्रकार नहीं तत्वों के क्रम को बनाए रखने। यह एक नियमित की तुलना में बहुत तेज हैList
। कुछ बुनियादी बेंचमार्क से पता चला है कि प्राथमिक प्रकारों (इंट, डबल, बूल, आदि) के साथ व्यवहार करने पर हैशसेट तेजी से कम होता है। क्लास ऑब्जेक्ट के साथ काम करते समय यह बहुत तेज है। तो वह बिंदु यह है कि हैशसेट तेज है।
एकमात्र पकड़ HashSet
यह है कि सूचकांकों तक कोई पहुंच नहीं है। उन तत्वों तक पहुँचने के लिए आप या तो एक एन्यूमरेटर का उपयोग कर सकते हैं या अंतर्निहित फ़ंक्शन का उपयोग करके उस HashSet
में एक List
और iterate में परिवर्तित कर सकते हैं। यहाँ एक नज़र रखना
एक HashSet
में एक आंतरिक संरचना (हैश) है, जहां आइटम को खोजा जा सकता है और जल्दी से पहचाना जा सकता है। नकारात्मक पक्ष यह है कि HashSet
(या सूचकांक द्वारा एक आइटम प्राप्त करना) के माध्यम से पुनरावृत्ति करना धीमा है।
तो क्यों कोई जानना चाहेगा कि एक सेट में पहले से ही एक प्रविष्टि मौजूद है?
एक स्थिति जहां एक HashSet
उपयोगी है एक सूची से अलग-अलग मान प्राप्त करने में है जहां डुप्लिकेट मौजूद हो सकते हैं। एक बार किसी आइटम को जोड़ने के बाद HashSet
यह निर्धारित होता है कि आइटम मौजूद है ( Contains
ऑपरेटर)।
के अन्य लाभों में HashSet
सेट संचालन कर रहे हैं: IntersectWith
, IsSubsetOf
, IsSupersetOf
, Overlaps
, SymmetricExceptWith
, UnionWith
।
यदि आप ऑब्जेक्ट बाधा भाषा से परिचित हैं तो आप इन सेट ऑपरेशंस की पहचान करेंगे। आप यह भी देखेंगे कि यह निष्पादन योग्य यूएमएल के कार्यान्वयन के करीब एक कदम है।
सीधे शब्दों में और रसोई के रहस्यों को उजागर किए बिना:
सामान्य रूप से एक सेट, एक संग्रह है जिसमें कोई डुप्लिकेट तत्व नहीं होते हैं, और जिनके तत्व किसी विशेष क्रम में नहीं होते हैं। तो, A HashSet<T>
एक जेनेरिक के समान है List<T>
, लेकिन खोने के आदेश की कीमत पर तेज लुकअप (हैशटैब के माध्यम से, जैसा कि नाम का अर्थ है) के लिए अनुकूलित है।
आवेदन के नजरिए से, अगर किसी को केवल डुप्लिकेट से बचने की आवश्यकता है HashSet
आप लुकअप, इंसर्ट और रिमूवल जटिलताएं ओ (1) - स्थिरांक की तलाश में हैं । इसका मतलब यह है कि इससे कोई फर्क नहीं पड़ता कि कितने तत्वों HashSet
में यह जांचने में समान समय लगेगा कि क्या इस तरह के तत्व हैं या नहीं, इसके अलावा जब से आप ओ (1) में तत्व डाल रहे हैं, तो यह इस तरह की चीज के लिए एकदम सही है।