Aracılığıyla paylaş


Hashtable ve Sözlük Koleksiyon Türleri

System.Collections.Hashtable sınıfı ile System.Collections.Generic.Dictionary<TKey,TValue> ve System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> genel sınıfları System.Collections.IDictionary arabirimini uygular. Genel Dictionary<TKey,TValue> sınıfı, IDictionary<TKey,TValue> genel arabirimini de uygular. Bu nedenle, bu koleksiyonlardaki her öğe bir anahtar ve değer çiftidir.

Hashtable nesnesi, koleksiyonun öğelerini içeren kovalar veya gruplardan 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 kova, öğenin anahtarını temel alan ve bir karma işlevi kullanılarak oluşturulan 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.

Hashtable içinde bir öğe olarak kullanılan her nesne, GetHashCode yönteminin bir uygulamasını kullanarak kendisi için bir karma kodu oluşturabilmelidir. Ancak, bir Hashtable uygulamasını parametrelerinden biri olarak kabul eden bir Hashtable oluşturucu kullanarak, IHashCodeProvider içindeki tüm öğeler için bir karma işlevi de belirtebilirsiniz.

Bir nesne Hashtable'e eklendiğinde, nesnenin karma koduyla eşleşen karma koduyla ilişkili olan 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 vardır; 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ı kovada yer alır.

Dictionary<TKey,TValue> ve ConcurrentDictionary<TKey,TValue> sınıfları, Hashtable sınıfıyla aynı işlevselliğe sahiptir. Belirli bir türdeki Dictionary<TKey,TValue> (dışında Object), değer türleri için Hashtable'den daha iyi performans 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. Birden fazla iş parçacığının koleksiyona aynı anda erişebileceği durumlarda, ConcurrentDictionary<TKey,TValue> sınıfı kullanılmalıdır.

Ayrıca bakınız