Hash Maps: Anahtar-Değer Depolama ve Veri Erişimi

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Top Poster Of Month
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Rust'ta HashMap<K, V>, anahtar-değer (key-value) çiftlerini saklayan bir koleksiyondur. Diğer dillerdeki "Dictionary", "Associative Array" veya "Map" yapılarına karşılık gelir. Verileri bir indis numarasıyla değil, atadığınız özel bir anahtar üzerinden saklamanızı ve bulmanızı sağlar.
Vektörler gibi Hash Map'ler de veriyi Heap üzerinde saklar ve dinamik olarak büyüyebilir.

1. Hash Map Oluşturma ve Veri Ekleme​

Hash Map, Rust'ın "prelude" (otomatik yüklenen) paketinde değildir. Bu yüzden her zaman açıkça içe aktarılması (use) gerekir.
Rust
Kod:
use std::collections::HashMap;

let mut skorlar = HashMap::new();

skorlar.insert(String::from("Mavi Takım"), 10);
skorlar.insert(String::from("Sarı Takım"), 50);

2. Veriye Erişme ve Güvenlik​

Bir değere erişmek için anahtarı kullanırız. .get() metodu her zaman bir Option<&V> döndürür. Bu, aradığınız anahtarın mevcut olmama ihtimaline karşı Rust'ın sağladığı bir güvenlik kalkanıdır.
Rust
Kod:
let takim_adi = String::from("Mavi Takım");
let skor = skorlar.get(&takim_adi); // Some(&10) döner

match skor {
    Some(s) => println!("Skor: {}", s),
    None => println!("Takım bulunamadı."),
}

3. HashMap ve Sahiplik (Ownership)​

HashMap'e veri eklerken sahiplik kuralları geçerlidir:
  • i32 gibi Copy trait’ine sahip türler kopyalanır.
  • String gibi sahiplik gerektiren türler map'in içine taşınır (Move). Artık o verinin sahibi HashMap'tir.

4. Değerleri Güncelleme Stratejileri​

HashMap üzerinde bir anahtarın değerini değiştirmek istediğinizde üç farklı senaryo vardır:

A. Üzerine Yazma​

Aynı anahtarla tekrar insert yaparsanız eski değer silinir.

B. Sadece Yoksa Ekle (Entry API)​

Bu, Rust'ın en sevilen özelliklerinden biridir. .entry() metodu ile bir değerin olup olmadığını kontrol edip, yoksa varsayılan bir değer atayabilirsiniz.
Rust
Kod:
// "Mavi Takım" yoksa değerini 0 yap, varsa mevcut olanı tut
skorlar.entry(String::from("Mavi Takım")).or_insert(0);

C. Eski Değere Göre Güncelleme​

Özellikle kelime sayma gibi işlemlerde, mevcut değeri alıp üzerinde işlem yapmanız gerekir:
Rust
Kod:
let metin = "elma armut elma";
let mut harita = HashMap::new();

for kelime in metin.split_whitespace() {
    let sayac = harita.entry(kelime).or_insert(0);
    *sayac += 1; // Dereference ile mevcut sayıyı artırıyoruz
}

5. Performans ve Hashing​

Rust, varsayılan olarak "SipHash" adı verilen ve Hash DoS saldırılarına karşı dirençli bir hashing algoritması kullanır. Bu çok güvenlidir ancak en hızlı algoritma değildir. Eğer performans kritikse ve güvenlik ikincil plandaysa, farklı bir Hasher (örneğin FNV) tanımlayarak hızı artırabilirsiniz.

Özet Tablo​

ÖzellikDetay
Kütüphanestd::collections::HashMap
Erişim.get() -> Option<&V>
Ekleme.insert(K, V) veya .entry(K).or_insert(V)
Döngüfor (key, value) in &hash_map { ... }
 
Geri
Üst