Разлика между речник и хешбел

Речник срещу Hashtable

Речникът е въведен (така, че valuetypes не се нуждаят от bxx), а Hashtable не (s valuetypes се нуждаят от bxx). Hashtable има по-хубав начин за получаване на стойност от речника IMHO, тъй като тя винаги знае, че стойността е обект. Мислете, че ако използвате .NET 3.5, лесно е да напишете разширение за метода на речника, за да получите подобно поведение.

Класът Hashtable е специфичен тип клас речник, който използва целочислена стойност (наречена хеш), за да помогне в паметта на своите ключове. Класът Hashtable използва хеш, за да ускори търсенето на конкретен ключ в колекцията. Всеки обект в .NET произлиза от клас Object. Този клас подкрепя метода GetHash, който връща цяло число, което идентифицира уникално обекта. Класът Hashtable е много ефективен колекционер като цяло. Единственият проблем с клас Hashtable е, че той изисква малко от над главата и за малки колекционери (по-малко от десет елемента), над главата може да попречи на изпълнението.

Има една по-съществена разлика между HashTable и речник. Ако използвате индексатори, за да получите стойност от HashTable, HashTable успешно ще върне нула за несъществуващ елемент, докато речникът ще направи грешка, ако опитате достъп до елемент с помощта на индексатор, който не съществува в речника.

HashTable е базовият клас, който е слабо типизиран; абстрактният клас DictionaryBase е строго въведен и използва вътрешно HashTable.

Странно нещо, което се забелязва при речника, е, когато добавим множеството записи в речника, се поддържа ордерът, в който се добавят записите. По този начин, ако приложите froreach към речника, ще получите recorrds в същия ред, в който сте ги вмъкнали. Докато това не е вярно с нормални HashTable, когато добавите същите записи в Hashtable, ордерът не се поддържа. Ако 'Речникът се основава на Hashtable' е вярно, защо речникът поддържа по-малкото, но HashTable не съществува?

Тъй като защо те се държат по различен начин, това е, защото Generic Dictionary въвежда хешируем файл, но не е базиран на System.Cоllectiоns.Hashtable. Реализацията на Generic Dictionary се основава на всички активиране на двойки ключ-стойност от списък. След това те се индексират с хеширащите кофи за достъп до randоm, но когато върне изброяване, той просто преминава в списъка в последователна поръчка - което ще бъде по-нататък от вмъкването, докато по-нататък записите не се използват повторно.