HashMap vs Hashtable: Hangi Durumda Hangisi Tercih Edilmeli?
🔎 1. Giriş – Map Seçiminin Önemi
Java Map yapıları, veri depolamada ve erişimde kritik rol oynar. doğru koleksiyonu seçmek performansı, thread güvenliği ve uygulama kararlılığını doğrudan etkiler.
2. Karşılaştırma Tablosu
| Özellik | HashMap | Hashtable | ConcurrentHashMap |
|---|---|---|---|
| Thread-Safety | ❌ Değil | ✅ Evet | ✅ Evet |
| Null Anahtar | ✅ (1 adet) | ❌ | ❌ |
| Null Değer | ✅ | ❌ | ❌ |
| Performans (10 thread) | 3.16 s | 56.27 s | 4.26 s |
| Performans (1 thread) | En hızlı | 2x yavaş | Yakın HashMap |
| Koleksiyon Framework | Java 1.2 | Java 1.0 (Legacy) | Java 5+ (Modern) |
| Fail‑Fast Iterator | ✅ | ✅ (Enumeration) | ⚠️ Fail-safe |
3. Detaylı Açıklamalar
3.1. Thread‑Safety – Senkronizasyon
HashMap thread-safe değildir; Hashtable synchronized çalışır; ConcurrentHashMap modern ve daha verimli thread-safe çözümdür.
3.2. Null Key & Value Desteği
HashMap bir null anahtar ve birden çok null değer kabul eder; Hashtable ve ConcurrentHashMap kabul etmez.
3.3. Performans & Benchmark
HashMap tek iş parçacığında en hızlıdır; Hashtable synchronized yükü nedeniyle yavaş; ConcurrentHashMap modern uygulamalarda tercih edilir.
4. Kod Örnekleri
🔹 HashMap Örneği
import java.util.HashMap;
public class HashMapExample {
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "Elma");
map.put(null, "Portakal");
map.put(2, null);
map.forEach((k,v) -> System.out.println(k + " => " + v));
}
}
🔹 Hashtable Örneği
import java.util.Hashtable;
public class HashtableExample {
public static void main(String[] args) {
Hashtable<Integer, String> ht = new Hashtable<>();
ht.put(1, "Elma");
ht.put(2, "Armut");
ht.forEach((k,v) -> System.out.println(k + " => " + v));
}
}
🔹 ConcurrentHashMap Örneği
import java.util.concurrent.ConcurrentHashMap;
public class ConcurrentHashMapExample {
public static void main(String[] args) {
ConcurrentHashMap<Integer, String> chm = new ConcurrentHashMap<>();
chm.put(1, "Java");
chm.putIfAbsent(2, "Python");
chm.replace(2, "Java");
chm.forEach((k,v) -> System.out.println(k + " => " + v));
}
}
5. Hangi Durumda Hangi Yapı?
| Durum / Senaryo | Tercih Edilen Yapı |
|---|---|
| Tek iş parçacıklı ve null gerekiyorsa | HashMap |
| Çoklu iş parçacıklı, legacy destek aranıyorsa | Hashtable |
| Modern yüksek performans ihtiyacı | ConcurrentHashMap |
| Basit thread güvenliği istendiğinde | Collections.synchronizedMap(new HashMap<>()) |
6. Sıkça Sorulan Sorular (FAQ)
- HashMap neden birden çok null değere izin verir?
- Hashtable neden artık tercih edilmez?
- HashMap’i nasıl thread-safe hale getiririm?
- ConcurrentHashMap hangi kilitleme stratejisini kullanır?
7. Sonuç & Öneriler
HashMap null key/value ve hız için ideal; Hashtable artık önerilmez; ConcurrentHashMap modern thread-safe çözüm. Bu yazımızda HashMap ve Hashtable arasındaki farkları anlattık.Daha fazla teknik bilgi ve eğitim için latestsoftwaredevelopers.com adresini ziyaret edebilirsiniz!