Karma Tablo ve Sözlük Koleksiyon Türleri
System.Collections.Hashtable sınıfı ve ve System.Collections.Generic.Dictionary<TKey,TValue> System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> genel sınıfları arabirimini System.Collections.IDictionary uygular. Genel Dictionary<TKey,TValue> sınıfı da genel arabirimini uygular IDictionary<TKey,TValue> . Bu nedenle, bu koleksiyonlardaki her öğe bir anahtar ve değer çiftidir.
Nesne Hashtable , koleksiyonun öğelerini içeren demetlerden oluşur. Demet, içindeki Hashtableöğelerin sanal bir alt grubudur ve bu da arama ve alma işlemini çoğu koleksiyona göre daha kolay ve hızlı hale getirir. Her demet, bir karma işlevi kullanılarak oluşturulan ve öğesinin anahtarını temel alan bir karma koduyla ilişkilendirilir.
Genel HashSet<T> sınıf, benzersiz öğeler içeren sıralanmamış bir koleksiyondur.
Karma işlevi, bir anahtara dayalı sayısal karma kodu döndüren bir algoritmadır. Anahtar, depolanmakta olan nesnenin bazı özelliğinin değeridir. Karma işlevi her zaman aynı anahtar için aynı karma kodu döndürmelidir. Karma işlevinin iki farklı anahtar için aynı karma kodu oluşturması mümkündür, ancak her benzersiz anahtar için benzersiz karma kodu oluşturan bir karma işlevi, karma tablodan öğe alınırken daha iyi performans elde edilir.
içinde Hashtable bir öğe olarak kullanılan her nesne, yönteminin bir uygulamasını GetHashCode kullanarak kendisi için bir karma kodu oluşturabilmelidir. Ancak, bir uygulamayı parametrelerinden biri olarak kabul eden bir Hashtable oluşturucu kullanarak içindeki tüm öğeler Hashtable için bir IHashCodeProvider karma işlevi de belirtebilirsiniz.
bir nesnesine Hashtableeklendiğinde, nesnenin karma koduyla eşleşen karma koduyla ilişkili demette depolanır. içinde Hashtablebir değer arandığında, bu değer için karma kod oluşturulur ve bu karma kodla ilişkili demet aranılır.
Örneğin, bir dizenin karma işlevi dizedeki her karakterin ASCII kodlarını alabilir ve bir karma kodu oluşturmak için bunları bir araya ekleyebilir. "piknik" dizesinin "sepet" dizesinin karma kodundan farklı bir karma kodu olabilir; bu nedenle, "piknik" ve "sepet" dizeleri farklı kovalarda olacaktır. Buna karşılık, "stresli" ve "tatlılar" aynı karma koda sahip olur ve aynı demette yer alır.
Dictionary<TKey,TValue> ve ConcurrentDictionary<TKey,TValue> sınıfları, sınıfıyla aynı işlevselliğe Hashtable sahiptir. Dictionary<TKey,TValue> Belirli bir türün (dışındaObject) bir değeri, değer türleri için değerinden daha iyi performans Hashtable sağlar. Bunun nedeni öğelerinin Hashtable türünde Objectolmasıdır; bu nedenle, genellikle bir değer türünü depoladığınızda veya aldığınızda kutulama ve kutu açma işlemi gerçekleşir. Sınıfı, ConcurrentDictionary<TKey,TValue> koleksiyona aynı anda birden çok iş parçacığı erişirken kullanılmalıdır.