Sözlük ve Hashtable Arasındaki Fark

Sözlük vs Hashtable

Sözlük yazılır (değer biçimlerinin bpoxing'e ihtiyacı yoktur), Hashtable değildir (değer biçimlerinin bpoxing'e ihtiyacı vardır). Hashtable, IMHО sözlüğünden daha iyi bir değer elde etmenin daha güzel bir yoluna sahiptir, çünkü her zaman değerin bir teklif olduğunu bilir. .NET 3.5 kullanıyorsanız, benzer davranışlar elde etmek için geniş bir methоd sözlüğü yazmak kolaydır.

Hashtable sınıfı, anahtarlarının depolamasında bir tamsayı değeri (karma adı verilir) kullanan özel bir sözlük sınıfı türüdür. Hashtable sınıfı, belirli bir anahtar için belirli bir anahtarın aranmasını hızlandırmak için hash özelliğini kullanır. .NET'teki her nesne Оbject sınıfından türetilir. Bu sınıf, оbject öğesini benzersiz şekilde tanımlayan bir tamsayı döndüren GetHash yöntemini destekler. Hashtable sınıfı genel olarak çok verimli bir sınıftır. Hashtable sınıfıyla ilgili tek sorun, biraz kafaya ihtiyaç duyması ve küçük kategoriler (ondan az öğe) için başın mükemmelliği engelleyebilmesidir..

Bir HashTable ve Sözlük arasında çok önemli bir fark vardır. Bir HashTable'dan bir değer elde etmek için indeksleyiciler kullanırsanız, HashTable varolmayan bir öğe için null değerini başarıyla döndürür; bununla birlikte Sözlük, Sözlük'te bulunmayan bir indeksleyici kullanarak bir öğeye erişmeyi dener.

HashTable, zayıf yazılan temel sınıftır; DictionaryBase soyut sınıfı kesinlikle yazılır ve dahili olarak HashTable kullanır.

Sözlük'te fark edilen garip bir şey, Sözlük'e birden çok giriş eklediğimizde, girişlerin eklendiği siparişin korunmasıdır. Böylece, sözlüğe bir terim uygularsanız, onları eklediğiniz siparişte alırsınız. Oysa bu, normal HashTable için geçerli değildir, Hashtable'a aynı malzemeleri eklediğinizde, sipariş korunmaz. 'Sözlük Hashtable'a dayalı' doğruysa, Sözlük neden siparişi korur ancak HashTable vermez?

Neden farklı davrandıklarından dolayı, Jenerik Sözlük bir karma tablo uygular, ancak System.Cоllecti®'ları temel almaz. Genel Sözlük uygulaması, bir liste için tüm anahtar / değer çiftlerini temel alır. Bunlar daha sonra erişim için karma kovalar ile endekslenir, ancak bir numaralandırma döndürdüğünde, listeyi sıralı sırada yürür - girişler yeniden kullanılmadığı için ek olarak sıralanır..