Difference between HashMap vs Hashtable in Java
प्रवेश स्तर के जावा प्रोग्रामर पर, आप हैशटेबल बनाम हैशपॉप पर इस साक्षात्कार प्रश्न की अपेक्षा कर सकते हैं।
यद्यपि प्रश्न वास्तव में आसान हो जाता है जब आप अन्य अवधारणाओं को जानते हैं जैसे कि हैशमैप कैसे काम करता है, फिर भी मेरे ब्लॉग पाठकों से कई प्रश्न प्राप्त करने के बाद जो जूनियर स्तर पर तैयारी कर रहे हैं या काम कर रहे हैं, मैंने अपने ज्ञान को hashmap and hashtable के बीच मतभेदों पर संक्षेप में तय किया है।
1. hashmap vs hashtable in java
1.1. Synchronization
हैशटेबल को सिंक्रनाइज़ किया गया है (यानी हैशटेबल के अंदर परिभाषित तरीके), जबकि हैशटेप नहीं है।
यदि आप एक HashMap thread-safe बनाना चाहते हैं, तो Collections.synchronizedMap (मैप) या ConcurrentHashMap वर्ग (class) का उपयोग करें।
हैशटेबल के अंदर के तरीकों को नीचे के रूप में सिंक्रनाइज़ किया गया है:
public
synchronized
boolean
contains(Object obj){ ... }
public
synchronized
boolean
containsKey(Object obj){ ... }
public
synchronized
Object get(Object obj){ ... }
public
synchronized
Object put(Object obj, Object obj1){ ... }
public
synchronized
Object remove(Object obj){ ... }
1.2. Null keys
हैशटेबल null keys or values की अनुमति नहीं देता है। HashMap एक अशक्त कुंजी (अन्य अशक्त कुंजी बस पहले अशक्त कुंजी को अधिलेखित कर देगा) और किसी भी शून्य मान की अनुमति देता है।
Hashtable<String, String> hashTable =
new
Hashtable<String, String>();
hashTable.put(
null
,
"value"
);
//OR
hashTable.put(
"key"
,
null
);
Output:
Exception in thread
"main"
java.lang.NullPointerException
at java.util.Hashtable.hash(Unknown Source)
at java.util.Hashtable.put(Unknown Source)
at test.core.MapExamples.main(MapExamples.java:
12
)
1.3. Legacy for java hashtable vs hashmap
हैशटेब विरासत श्रेणी है और प्रारंभिक जावा कलेक्शंस फ्रेमवर्क का हिस्सा नहीं था (बाद में इसे JDK 1.2 में शामिल किया गया था)। हाशपैप जन्म से ही संग्रह का हिस्सा है।
यह भी ध्यान दें कि हैशटेबल डिक्शनरी क्लास का विस्तार करता है, जो कि जावदोस्क राज्य के रूप में अप्रचलित है और इसे नए JDK संस्करणों में मैप इंटरफेस द्वारा बदल दिया गया है।
//HashTable is defined as
public
class
Hashtable
extends
Dictionary
implements
Map, Cloneable, Serializable {}
//HashMap is defined as
public
class
HashMap
extends
AbstractMap
implements
Map, Cloneable, Serializable {}
1.4. Fail-fast iterator of diff between hashmap and hashtable
यदि किसी अन्य थ्रेड ने मानचित्रकार को हटाने या हटाने के लिए किसी भी तत्व को जोड़कर या उसके द्वारा मानचित्र को संरचनात्मक रूप से संशोधित किया है, तोHashMap
में Iterator विफल-तेज है और ConcurrentModificationException को फेंक दें।
लेकिन यह एक गारंटीकृत व्यवहार नहीं है और सबसे अच्छे प्रयास पर जेवीएम द्वारा किया जाएगा। हैशटेबल के लिए एन्यूमरेटर फेल-फास्ट नहीं है।
HashMap<String, String> hashMap =
new
HashMap<String, String>();
hashMap.put(
"key1"
,
"value1"
);
hashMap.put(
"key2"
,
"value2"
);
hashMap.put(
"key3"
,
"value3"
);
hashMap.put(
"key4"
,
"value4"
);
Iterator<String> iterator = hashMap.keySet().iterator();
while
(iterator.hasNext()){
iterator.next();
iterator.remove();
System.out.println(hashMap);
}
Output:
{key3=value3, key2=value2, key1=value1}
{key2=value2, key1=value1}
{key1=value1}
{}
1.5. contains() method in difference between hashmap and hashtable
अंत में, मानचित्र Hashtable इंटरफ़ेस में एक छोटी सी कमी को ठीक करता है। Hashtable में एक विधि होती है जिसे “contains()” (“containsValue()” और “containsKey()“) कहा जाता है, जो यदि Hashtable में दिए गए मान में सही है। इसके नाम को देखते हुए, आप उम्मीद कर सकते हैं कि अगर Hashtable में कोई कुंजी दी गई है, तो यह सही है।
मैप इंटरफ़ेस इस पद्धति को हटाकर भ्रम के इस स्रोत को समाप्त कर देता है और इसमें केवल “containsValue()” और “containsKey()“ होता है।
public
boolean
containsKey(Object obj) {...}
public
boolean
containsValue(Object obj) {...}
2. Use of java hashtable vs hashmap HashMap
शायद ही कोई नौकरी है जो हैशपॉट या इससे संबंधित वर्ग (i.e. LinkedHashMap or ConcurrentHashMap) जो हैशटेबल नहीं कर सकता है।
इसलिए, आपके द्वारा लिखे गए नए कोड में हैशटेबल का उपयोग करने का कोई अच्छा कारण नहीं है। Always prefer to use HashMap over HashTable.
इस सूची के अंदर और अधिक गहराई तक जाना वास्तव में कठिन है। जैसे ही आप उपरोक्त अंतरों को समझने में सक्षम होते हैं,
आप दोनों वर्गों का उपयोग करने के लिए अच्छे हैं (केवल हैशपॉप का उपयोग करना चाहिए)।
मेरे लिए, उपरोक्त बिंदुओं से परे विश्लेषण करना समय की बर्बादी है। इसलिए, मैं यहां रुक रहा हूं।
No comments:
Post a Comment