जावा में हाशप और हैशटेबल के बीच अंतर

लेखक: Laura McKinney
निर्माण की तारीख: 2 अप्रैल 2021
डेट अपडेट करें: 5 मई 2024
Anonim
Java Interview Series - 2 | Difference between Hashmap and HashTable | Team MAST
वीडियो: Java Interview Series - 2 | Difference between Hashmap and HashTable | Team MAST

विषय


HashMap और Hashtable, दोनों एक का प्रतिनिधित्व करने के लिए उपयोग किया जाता है वस्तुओं का समूह में प्रतिनिधित्व किया है जोड़ी। से प्रत्येक जोड़ी कहलाती है प्रवेश वस्तु। संग्रह एंट्रीज को हैशपोट और हैशटेबल के ऑब्जेक्ट द्वारा संदर्भित किया जाता है। एक संग्रह की कुंजी विशिष्ट या विशिष्ट होनी चाहिए। HashMap और Hashtable के बीच अंतर यह है कि हैश मैप विशेष रूप से मैप इंटरफ़ेस को लागू करता है, जबकि हैश टेबल डिक्शनरी क्लास (विरासत वर्ग) का विस्तार करता है, जिसे मैप इंटरफ़ेस को लागू करने के लिए फिर से जोड़ा गया है। अन्य महत्वपूर्ण अंतर यह है कि हाशप की वस्तुएं हैं अनसिंक्रनाइज़्ड जबकि, हैशटेब की वस्तु है सिंक्रनाइज़.

हैशपे और हैशटेबल के बीच कुछ और अंतरों को जानने के लिए नीचे दिए गए तुलना चार्ट को देखें।

  1. तुलना चार्ट
  2. परिभाषा
  3. मुख्य अंतर
  4. समानताएँ
  5. निष्कर्ष

तुलना चार्ट

तुलना के लिए आधारहैश मैपहैश टेबल
लागू / बढ़ाएँHashMap वर्ग मानचित्र इंटरफ़ेस को लागू करता है और एक AbstractMap वर्ग का विस्तार करता है।हैशटेबल डिक्शनरी लिगेसी वर्ग का विस्तार करता है, लेकिन यह फिर से इंजीनियर है और अब यह मैप इंटरफेस को भी लागू करता है।
तादात्म्यHashMap अनसंकटाइज़्ड है, और इसलिए, HashMap ऑब्जेक्ट सुरक्षित रूप से थ्रेडेड नहीं है।हैशटेबल सिंक्रनाइज़ है, और इसलिए, हैशटेबल का उद्देश्य थ्रेड सुरक्षित है।
कुंजी / मूल्यएक कुंजी केवल एक बार नल वापस कर सकती है, लेकिन एक मूल्य किसी भी समय नल को वापस कर सकता है।कोई कुंजी Null नहीं लौटा सकती क्योंकि इसका उपयोग हैश कोड प्राप्त करने के लिए किया जाता है जिसे हैश तालिका के सूचकांक के रूप में उपयोग किया जाएगा, और कोई मान Null वापस नहीं कर सकता है।
डिफ़ॉल्ट प्रारंभिक क्षमताHashMap की डिफ़ॉल्ट प्रारंभिक क्षमता 16 है।हैशटेबल की डिफ़ॉल्ट प्रारंभिक क्षमता 11 है।
traversingHashMap Iterator द्वारा ट्रैवर्स किया गया है।मैप क्लास की तरह हैशटेबल भी ट्रैवर्सिंग के लिए सीधे Iterator का समर्थन नहीं करता है और इसलिए, यह Enumerator का उपयोग करता है।


हाशप की परिभाषा

HashMap एक वर्ग है जो लागू करता है नक्शा इंटरफ़ेस और फैली हुई है AbstractMap वर्ग हैश तालिका का उपयोग करता है। HashMap की वस्तु एक संग्रह / सेट को संदर्भित करती है जोड़ी जहां प्रत्येक कुंजी को एक विशेष मूल्य के लिए मैप किया जाता है। एक संग्रह में कुंजियाँ अद्वितीय होनी चाहिए क्योंकि वे मूल्य को पुनः प्राप्त करने के लिए उपयोग की जाती हैं। दूसरी ओर, एक संग्रह के मूल्यों को दोहराया जा सकता है। HashMap क्लास की घोषणा और HashMapclass के निर्माता इस प्रकार हैं:

/ * K कुंजी का प्रतिनिधित्व करता है, और V मूल्य का प्रतिनिधित्व करता है * / वर्ग HashMap / * हैशपॉप क्लास के कंस्ट्रक्टर्स * / हैशपॉप () हैशपॉप (मैप <; एक्सटेंडर्स के; एक्सटेंड्स वी> एम) हैशपॉप (इंटेंस कैपेसिटी) हाशप (इंट कैपेसिटी, फ्लोट फिलरैटो)

पहला कंस्ट्रक्टर एक डिफ़ॉल्ट कंस्ट्रक्टर है जो 16 की डिफ़ॉल्ट क्षमता और 0.75 के डिफॉल्ट फिल अनुपात के साथ हाशप के खाली ऑब्जेक्ट को इनिशियलाइज़ करता है। दूसरा कंस्ट्रक्टर मी के मूल्य के साथ हैश मैप को इनिशियलाइज़ करता है। तीसरा निर्माता तर्क क्षमता "क्षमता" में प्रदान किए गए मूल्य के अनुरूप प्रारंभिक क्षमता वाला हैश मैप बनाता है। चौथा कंस्ट्रक्टर हैश मैप को एक क्षमता और मापदंडों में प्रदान किए गए भरण अनुपात के साथ आरंभ करता है। आइए अब सीखते हैं कि हैश मैप में प्रविष्टियों को कैसे फीड किया जाए।


हशमप hm = new Hashmap (); hm.put ("अजय", 275); hm.put ("विजय", 250); hm.put ("जॉनी", 150); hm.put ("जॉर्डन", 200); System.out.ln (hm); / * आउटपुट * / {विजय = 250, जॉनी = 150, अजय = 275, जॉर्डन = 200}

उपरोक्त कोड में, आप देख सकते हैं कि मैंने एक खाली HashMap ऑब्जेक्ट बनाया है एचएम डिफ़ॉल्ट प्रारंभिक क्षमता और डिफ़ॉल्ट भरण अनुपात के साथ। फिर मैंने पुट (K, V) पद्धति का उपयोग करते हुए हैश मैप में चार प्रविष्टियाँ डालीं, जो मूल्य की कुंजी को मैप करती हैं। आप देख सकते हैं कि प्रविष्टियाँ किसी अनुक्रम में एड नहीं हैं जो आप उन्हें खिलाते हैं क्योंकि प्रविष्टि क्रम तय नहीं है। अब, ऐसे मामले पर विचार करें, जिसमें आपके पास पहले से ही एक प्रविष्टि है हैश मैप में और उसके बाद आप put (K1, V5) डालने की कोशिश करते हैं, यानी आप एक ही कुंजी को एक अलग मूल्य के साथ मैप करने का प्रयास करते हैं। फिर पुट विधि पुराने मान V1 को नए मान V2 के साथ बदल देगी और पुराने मान VV1 को वापस कर देगी, अन्यथा, यदि हम कभी भी किसी कुंजी के मान को बदलने का प्रयास नहीं करते हैं, तो उस कुंजी के लिए विधि रिटर्न Null डालें।

हैशटेबल की परिभाषा

हैशटेबल एक वर्ग है जो विस्तार करता है शब्दकोश वर्ग जो एक विरासत वर्ग है और जिसे लागू करने के लिए पुनर्संगठित किया जाता है नक्शा इंटरफेस। हैशटेबल अपनी डेटा संरचना के रूप में हैश तालिका का उपयोग करता है। हैशटेबल हाशप के समान है क्योंकि यहां भी हैशटेबल का उद्देश्य प्रविष्टियों के संग्रह को संदर्भित करता है जहां प्रत्येक प्रविष्टि एक जोड़ी है । एक संग्रह में सभी कुंजी दूसरी ओर अद्वितीय होनी चाहिए, मूल्यों को डुप्लिकेट किया जा सकता है। कुंजी को विशेष रूप से हैश कोड मान प्राप्त करने के लिए उपयोग किया जाता है जो सूचकांक को तय करता है, जहां जोड़ी हैश तालिका में संग्रहीत की जाएगी। हैश तालिका में, न तो कोई कुंजी और न ही कोई मान Null पॉइंटर लौटा सकता है। हमें हैशटेबल क्लास और हैशटेबल क्लास के कंस्ट्रक्टर्स की घोषणा देखें।

/ * K कुंजी निर्दिष्ट करता है और V कुंजी के साथ जुड़े मूल्य को निर्दिष्ट करता है * / वर्ग हैशटेबल / * हैशटेब के निर्माणकर्ता * / हैशटेबल () हैशटेबल (इंट साइज़) हैशटेबल (int size, float fillRatio) हैशटेबल (मैप <; फैली K; फैली हुई V> m?)

उपरोक्त कोड में, पहला कंस्ट्रक्टर एक डिफॉल्ट कंस्ट्रक्टर है जो क्लास हैशटेबल का एक खाली ऑब्जेक्ट बनाता है, इसका डिफॉल्ट साइज 11 है और डिफॉल्ट फिल रेशो 0.75 है। दूसरा निर्माण पैरामीटर "आकार" में दिए गए मूल्य के अनुरूप आकार के साथ एक हैश तालिका बनाता है। तीसरा निर्माण एक हैश तालिका बनाता है जिसमें एक आकार और एक भरण अनुपात पैरामीटर में प्रदान किया जाता है। चौथा कंस्ट्रक्टर हैश तालिका को मूल्य m के साथ आरंभ करता है। आइए अब सीखते हैं कि कैसे सम्मिलित करें हैश तालिका में जोड़ी।

हैशटेबल ht = नया हैशटेबल (); ht.put (नया हैशकोड (2), 275); ht.put (नया हैशकोड (12), 250); ht.put (नया हैशकोड (16), 150); ht.put (नया हैशकोड (8), 200); System.out.ln (ht); / * आउटपुट * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

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

  1. हाशपाप लागू होता है नक्शा इंटरफ़ेस और एक अमूर्त वर्ग का विस्तार करता है, AbstractMap जबकि, हैशटेबल अमूर्त वर्ग का विस्तार करता है शब्दकोश, जो एक लिगेसी वर्ग भी है, जिसे बाद में लागू करने के लिए पुन: प्रस्तुत किया गया नक्शा इंटरफेस।
  2. HashMap वस्तु है अनसिंक्रनाइज़्ड यानी एक ही समय में कई धागे उस पर काम कर सकते हैं और इसलिए, यह ऑब्जेक्ट थ्रेड को सुरक्षित नहीं करता है। दूसरी ओर, हैशटेब की वस्तुएं हैं सिंक्रनाइज़ यानी अगर कोई थ्रेड हैशटेबल के ऑब्जेक्ट पर ऑपरेट करना चाहता है तो उसे उस ऑब्जेक्ट पर लॉक हासिल करना होता है ताकि कोई दूसरा धागा उस ऑब्जेक्ट तक न पहुंच सके और इसलिए, यह थ्रेड सेफ है।
  3. HashMap कुंजी में वापस आ सकते हैं केवल एक बार नल, और मान वापस आ सकते हैं कई बार नल। दूसरी ओर, एक कुंजी कभी भी अशक्त नहीं लौट सकती क्योंकि इसका उपयोग हैश कोड मान प्राप्त करने के लिए किया जाता है जिसे स्टोर करने के लिए एक इंडेक्स के रूप में उपयोग किया जाता है जोड़ी और न ही एक मूल्य नल वापस कर सकते हैं।
  4. हैशपॉप क्लास में हैश टेबल की डिफ़ॉल्ट क्षमता है 16 जबकि, हैशटेबल में हैश टेबल की डिफ़ॉल्ट क्षमता है 11.
  5. इटरेटर Hashmap प्रविष्टियों को पीछे छोड़ सकता है। दूसरी ओर, हैशटेबल सीधे Iterator का समर्थन नहीं करता है और इसलिए, आमतौर पर गणनाकार हैशटेबल में प्रविष्टियों को ट्रेस करने के लिए उपयोग किया जाता है।

समानता:

  • HashMap और Hashtable दोनों की डेटा संरचना का उपयोग करता है हैश टेबल.
  • HashMap और Hashtable दोनों को लागू करता है नक्शा इंटरफेस
  • सम्मिलन आदेश संरक्षित नहीं है HashMap और Hashtable दोनों में और कुंजी का उपयोग करके प्राप्त हैश कोड के आधार पर।
  • HashMap और Hashtable में, कुंजी होना चाहिए अद्वितीय जबकि, मूल्य हो सकते हैं डुप्लिकेट.
  • HashMap और Hashtable दोनों शामिल हो सकते हैं विषम वस्तुएं कुंजी और मूल्यों दोनों के लिए।
  • HashMap और Hashtable, दोनों लागू करता है serializable तथा Cloneable इंटरफेस लेकिन नहीं, यादृच्छिक पहुँच.
  • HashMap और Hashtable दोनों का डिफ़ॉल्ट भरण अनुपात है 0.75.
  • HashMap और Hashtable दोनों पुनर्प्राप्ति या के लिए सबसे अच्छा कर रहे हैं खोज कर संचालन।

निष्कर्ष:

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