Rječnik vs Hashtable
Rječnik je upisan (tako da tipovi vrijednosti ne trebaju boks), Hashtable nije (tako da tipovi vrijednosti trebaju boks). Hashtable ima ljepši način dobivanja vrijednosti od rječnika IMHO, jer uvijek zna da je vrijednost objekt. Iako ako koristite. NET 3.5, lako je napisati metodu proširenja za rječnik kako bi se postiglo slično ponašanje.
Klasa Hashtable je specifična vrsta klase rječnika koja koristi cjelobrojnu vrijednost (nazvanu hash) za pomoć u pohranjivanju svojih ključeva. Klasa Hashtable koristi hash kako bi ubrzala traženje određenog ključa u kolekciji. Svaki predmet u. NET proizlazi iz klase Objekt. Ova klasa podržava metodu GetHash, koja vraća cijeli broj koji jedinstveno identificira objekt. Klasa Hashtable općenito je vrlo učinkovita kolekcija. Jedini problem s klasom Hashtable je to što zahtijeva malo dodatnih troškova, a za male zbirke (manje od deset elemenata) dodatni troškovi mogu ometati izvedbu.
Postoji još jedna važna razlika između HashTablea i Rječnika. Ako koristite indeksatore da dobijete vrijednost iz HashTablea, HashTable će uspješno vratiti null za nepostojeću stavku, dok će Rječnik izbaciti pogrešku ako pokušate pristupiti stavci pomoću indeksatora koji ne postoji u Rječniku.
HashTable je osnovna klasa koja je slabo tipizirana; apstraktna klasa DictionaryBase je strogo tipizirana i interno koristi HashTable.
Čudna stvar koju smo primijetili u vezi s Rječnikom je da kada dodamo više unosa u Rječnik, zadržava se redoslijed dodavanja unosa. Dakle, ako primijenite foreach na Rječniku, dobit ćete zapise istim redoslijedom kojim ste ih umetnuli. Dok to nije točno s normalnom HashTableom, kad dodate iste zapise u Hashtable, redoslijed se ne održava. Ako je 'Rječnik temeljen na Hashtable' točno, zašto Rječnik održava redoslijed, a HashTable ne?
Što se tiče zašto se ponašaju drugačije, to je zato što Generic Dictionary implementira hashtable, ali se ne temelji na System. Collections. Hashtable. Implementacija Generičkog rječnika temelji se na dodjeli parova ključ-vrijednost s popisa. Oni se zatim indeksiraju sa spremnicima tablice raspršivanja za nasumični pristup, ali kada vrati enumerator, samo šeta popisom uzastopnim redoslijedom – što će biti redoslijed umetanja sve dok se unosi ne koriste ponovno.