HashMap vs HashTable
दो key-value maps
HashMap और Hashtable दोनों key-value pairs store करती हैं, पर thread safety, null handling और speed में अलग हैं। HashMap आधुनिक default है; Hashtable पुरानी, legacy class है। अंतर जानना सही चुनने में मदद करता है।
HashMap
import java.util.HashMap;
HashMap<String, Integer> map = new HashMap<>();
map.put("Aman", 88);
map.put(null, 0); // null key allowed
System.out.println(map.get("Aman"));
HashMap तेज़ key-based lookup देती है और एक null key allow करती है। यह thread-safe नहीं, बिल्कुल इसीलिए तेज़ है — सामान्य single-threaded programs को आदर्श।
Hashtable
import java.util.Hashtable;
Hashtable<String, Integer> table = new Hashtable<>();
table.put("Aman", 88);
// table.put(null, 0); // ERROR: कोई null keys नहीं
System.out.println(table.get("Aman"));
Hashtable thread-safe है क्योंकि इसकी सारी methods synchronized हैं। पर यह null keys या values allow नहीं करती, और synchronization इसे धीमा बनाता है।
मुख्य अंतर
- Thread safety: Hashtable synchronized है; HashMap नहीं।
- Speed: HashMap तेज़ है (कोई locking overhead नहीं)।
- Nulls: HashMap एक null key और null values allow करती है; Hashtable कोई नहीं।
- उम्र: Hashtable legacy है; HashMap आधुनिक विकल्प।
Null keys और values
HashMap<String, String> m = new HashMap<>();
m.put(null, "ok"); // HashMap में ठीक
m.put("x", null); // ठीक
// Hashtable किसी पर भी NullPointerException देगी
HashMap null key और null values सहन करती है, जो सुविधाजनक हो सकता है। Hashtable दोनों ठुकराती है, NullPointerException देकर — सूक्ष्म पर महत्वपूर्ण अंतर।
आज क्या इस्तेमाल करें
- Single-threaded code → HashMap (तेज़, आम मामला)।
- Thread-safe access → ConcurrentHashMap (आधुनिक, कुशल)।
- Hashtable → नए code में आमतौर पर बचिए; यह legacy है।
तो व्यवहार में आप शायद ही Hashtable तक पहुँचते हैं — HashMap या ConcurrentHashMap आज की ज़रूरतें cover करती हैं।
आम गलतियाँ
- नए code को Hashtable इस्तेमाल करना। HashMap या ConcurrentHashMap बेहतर।
- HashMap को thread-safe मानना। यह नहीं है — उसको ConcurrentHashMap इस्तेमाल कीजिए।
- Hashtable में null key डालना। यह NullPointerException देती है।
- Insertion order की उम्मीद। कोई order नहीं रखती; चाहिए तो LinkedHashMap इस्तेमाल कीजिए।
सारांश
- दोनों key-value pairs store करती हैं; safety, nulls और speed में अलग।
- HashMap तेज़, thread-safe नहीं, एक null key allow।
- Hashtable thread-safe, धीमी, कोई nulls नहीं, और legacy।
- Single-threaded code को HashMap इस्तेमाल कीजिए।
- Thread safety को Hashtable नहीं, ConcurrentHashMap इस्तेमाल कीजिए।
आगे, maps दोहराइए Collections Framework में, या sets तुलना कीजिए HashSet vs TreeSet में।
