HashMap ve HashSet: Anahtar-Değer Çiftleri ile Veri Yönetimi

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ı​


ÖzellikHashMapHashSet
Veri YapısıAnahtar-Değer çifti (Key-Value).Sadece Nesne (Object).
Yöntemput(K, V) ile eklenir.add(E) ile eklenir.
Tekrar DurumuDeğerler tekrar edebilir, Anahtarlar edemez.Elemanlar asla tekrar edemez.
Null Değeri1 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.
 
Geri
Üst