C#, Java’daki gibi doğrudan “HashMap” adında bir sınıf sunmaz. Bununla birlikte, Dictionary<TKey, TValue>
sınıfı eşdeğer işlevselliği sağlar ve hash map işlemleri için önerilen yaklaşımdır.
İçerik Tablosu
Dictionary<TKey, TValue>
‘ı Hash Map Olarak Kullanma
Dictionary<TKey, TValue>
, ekleme, silme ve alma gibi yaygın işlemler için O(1) ortalama zaman karmaşıklığına sahip bir anahtar-değer deposu sunar. TKey
anahtar türünü, TValue
ise ilişkili değer türünü belirtir. Kullanımını inceleyelim:
Dictionary Oluşturma ve Doldurma:
// Anahtar olarak string, değer olarak integer saklayacak bir dictionary oluşturun.
Dictionary<string, int> myDictionary = new Dictionary<string, int>();
// Add() kullanarak anahtar-değer çiftleri ekleyin
myDictionary.Add("apple", 1);
myDictionary.Add("banana", 2);
myDictionary.Add("cherry", 3);
// Ya da koleksiyon başlatıcı sözdizimi kullanın:
Dictionary<string, int> anotherDictionary = new Dictionary<string, int>()
{
{"grape", 4},
{"orange", 5}
};
Değerlere Erişim:
Değerleri anahtarlarını kullanarak alın. TryGetValue()
, anahtarın yokluğunu ele aldığı için doğrudan indekslemeden daha güvenlidir:
int appleCount;
if (myDictionary.TryGetValue("apple", out appleCount))
{
Console.WriteLine($"Elma sayısı: {appleCount}"); // Çıktı: Elma sayısı: 1
}
else
{
Console.WriteLine("Elma bulunamadı.");
}
// Doğrudan erişim (anahtar yoksa KeyNotFoundException fırlatır)
try
{
Console.WriteLine($"Muz sayısı: {myDictionary["banana"]}"); // Çıktı: Muz sayısı: 2
}
catch (KeyNotFoundException)
{
Console.WriteLine("Anahtar bulunamadı.");
}
Dictionary’de Gezinme:
Console.WriteLine("Dictionary içeriği:");
foreach (KeyValuePair<string, int> kvp in myDictionary)
{
Console.WriteLine($"Anahtar: {kvp.Key}, Değer: {kvp.Value}");
}
Elemanları Kaldırma:
myDictionary.Remove("banana");
Anahtar Varlığını Kontrol Etme:
if (myDictionary.ContainsKey("cherry"))
{
Console.WriteLine("Kiraz mevcut.");
}
Gelişmiş Kullanım ve Hususlar
İplik güvenliği gerektiren senaryolar için ConcurrentDictionary<TKey, TValue>
kullanın. Anahtarları seçerken, çakışmaları önlemek ve hash map verimliliğini korumak için GetHashCode()
ve Equals()
‘ı doğru bir şekilde uygulamalarını sağlayın. Bu hususları anlamak, optimum performans için çok önemlidir.
Sonuç
C#’daki Dictionary<TKey, TValue>
, anahtar-değer depolaması için mükemmel performans sağlayan, HashMap’in etkili bir eşdeğeridir. Çok yönlülüğü, iplik güvenli alternatiflerin kullanılabilirliğiyle birleştiğinde, onu çeşitli C# uygulamaları için temel bir veri yapısı haline getirir.