crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
HashMap ve HashSet: Hızın Sınırlarında Veri Yönetimi
1. HashMap: Anahtar-Değer (Key-Value) İkilisi
HashMap, verileri bir "Etiket" (Key) ve o etikete karşılık gelen "İçerik" (Value) şeklinde saklar. Bir sözlük gibi düşünebilirsiniz; kelimeyi (key) bilirseniz, tanımına (value) anında ulaşırsınız.
Anahtarlar Benzersizdir: Bir Map içinde aynı anahtardan iki tane olamaz. Eğer mevcut bir anahtarla yeni bir değer eklerseniz, eski değerin üzerine yazılır.
Hız: Veriye anahtar üzerinden erişim süresi O(1)'dir (Sabit zaman).
Sıralama: Elemanları ekleme sırasına göre değil, kendi iç algoritmasına (Hash) göre karışık tutar.
Java:
HashMap<Integer, String> ogrenciler = new HashMap<>();
// Veri ekleme (put)
ogrenciler.put(101, "Ahmet Yılmaz");
ogrenciler.put(102, "Elif Demir");
ogrenciler.put(101, "Mehmet Can"); // 101 nolu anahtarın değeri güncellenir.
// Veri çekme (get)
System.out.println(ogrenciler.get(102)); // Çıktı: Elif Demir
2. HashSet: Benzersiz Elemanlar Kümesi
HashSet, matematikteki kümelerin Java karşılığıdır. Sadece benzersiz elemanları saklamanıza izin verir.
Tekrar Yoktur: Aynı elemanı 100 kere eklemeye çalışsanız da içeride sadece 1 tane tutulur.
Arka Planda HashMap: İlginç bir bilgi; HashSet aslında arka planda bir HashMap kullanır. Eklediğiniz değerler, bir HashMap'in "Anahtar" kısmına yerleştirilir.
Sıralama Garantisi Yoktur: Elemanların hangi sırada duracağı belli değildir.
Java:
HashSet<String> diller = new HashSet<>();
diller.add("Java");
diller.add("Python");
diller.add("Java"); // Bu işlem hiçbir şeyi değiştirmez.
if (diller.contains("Java")) {
System.out.println("Java zaten listede!");
}
3. HashMap vs. HashSet Karşılaştırması
| Özellik | HashMap | HashSet |
|---|---|---|
| Veri Yapısı | Anahtar-Değer çifti (Key-Value). | Sadece Nesne (Object). |
| Yöntem | put(K, V) ile eklenir. | add(E) ile eklenir. |
| Tekrar Durumu | Değerler tekrar edebilir, Anahtarlar edemez. | Elemanlar asla tekrar edemez. |
| Null Değeri | 1 adet null anahtar ve çokça null değer olabilir. | En fazla 1 adet null eleman olabilir. |
4. Kritik Kavram: hashCode() ve equals()
Bu yapıların düzgün çalışması için eklediğiniz nesnelerin hashCode() ve equals() metotlarının doğru ezilmiş (override) olması gerekir.
hashCode(): Nesnenin hangi "kova"ya (bucket) konulacağını belirler.
equals(): İki nesne aynı kovaya düşerse, gerçekten aynı olup olmadıklarını kontrol eder.
5. Hangisini Seçmelisiniz?
Senaryo A: "Sistemdeki tüm kullanıcıların benzersiz e-posta adreslerini tutmak istiyorum." -> HashSet
Senaryo B: "Ürün barkodunu okuttuğumda ürünün ismini ve fiyatını anında görmek istiyorum." -> HashMap
Senaryo C: "Bir metindeki kelimelerin kaçar kez geçtiğini saymak istiyorum." -> HashMap (Anahtar: Kelime, Değer: Sayaç)
Sonuç
HashMap ve HashSet, Java'da performansın anahtarıdır. İndekslerle uğraşmak yerine, veriye doğrudan kimliği üzerinden ulaşmanızı sağlarlar. Özellikle büyük veri setlerinde (Big Data) arama maliyetini minimuma indirmek için bu yapılar hayati öneme sahiptir.