Разлика между речник и Hashtable

Разлика между речник и Hashtable
Разлика между речник и Hashtable

Видео: Разлика между речник и Hashtable

Видео: Разлика между речник и Hashtable
Видео: Гарвард. CS50 на русском. 1. Короткие видео. 1. Хэш таблицы 2024, Април
Anonim

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

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

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

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

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

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

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

Препоръчано: