- 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.
Rust
Rust
Rust
Rust
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:i32gibi Copy trait’ine sahip türler kopyalanır.Stringgibi 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 tekrarinsert 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ı birHasher (örneğin FNV) tanımlayarak hızı artırabilirsiniz.Özet Tablo
| Özellik | Detay |
| Kütüphane | std::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 { ... } |