Razlika između rječnika i hashtable

Razlika između rječnika i hashtable
Razlika između rječnika i hashtable

Video: Razlika između rječnika i hashtable

Video: Razlika između rječnika i hashtable
Video: Razlika između vresa i erike 2024, Juli
Anonim

Rječnik vs Hashtable

Rječnik je otkucan (tako da tipovima vrijednosti nije potrebno boksiranje), Hashtable nije (dakle, tipovima vrijednosti je potrebno boksiranje). Hashtable ima lepši način dobijanja vrednosti od rečnika IMHO, jer uvek zna da je vrednost objekat. Iako ako koristite. NET 3.5, lako je napisati metodu proširenja za rječnik da biste dobili slično ponašanje.

Klasa Hashtable je specifičan tip klase rječnika koja koristi cjelobrojnu vrijednost (nazvanu hash) da bi pomogla u pohranjivanju svojih ključeva. Hashtable klasa koristi hash da ubrza pretragu za određenim ključem u kolekciji. Svaki objekat u. NET proizilazi iz klase Object. Ova klasa podržava metodu GetHash, koja vraća cijeli broj koji jedinstveno identificira objekat. Hashtable klasa je općenito vrlo efikasna kolekcija. Jedini problem sa klasom Hashtable je taj što zahtijeva malo dodatnih troškova, a za male kolekcije (manje od deset elemenata) dodatni troškovi mogu ometati performanse.

Postoji još jedna važna razlika između HashTable i Rječnika. Ako koristite indeksere da biste dobili vrijednost iz HashTable, HashTable će uspješno vratiti null za nepostojeću stavku, dok će Rječnik ispustiti grešku ako pokušate pristupiti stavci pomoću indeksera koji ne postoji u Dictionary.

HashTable je osnovna klasa koja je slabo ukucana; DictionaryBase apstraktna klasa je strogo otkucana i interno koristi HashTable.

Čudna stvar koja se primjećuje u vezi sa rječnikom je da kada dodamo više unosa u rječnik, redoslijed kojim se unosi dodaju se održava. Dakle, ako primijenite foreach na Rječnik, dobit ćete zapise istim redoslijedom kojim ste ih ubacili. Dok, ovo nije tačno sa normalnom HashTable, kada dodate iste zapise u Hashtable, redosled se ne održava. Ako je 'Rječnik baziran na Hashtable' istina, zašto Rječnik održava redoslijed, ali HashTable ne?

Što se tiče zašto se ponašaju drugačije, to je zato što Generički rječnik implementira hashtable, ali nije zasnovan na System. Collections. Hashtable. Implementacija generičkog rječnika zasniva se na dodjeli parova ključ-vrijednost sa liste. Oni se zatim indeksiraju s heš-tablicama za slučajni pristup, ali kada vrati popisivač, on samo hoda po listi u sekvencijalnom redoslijedu – koji će biti redoslijed umetanja sve dok se unosi ne koriste ponovo.

Preporučuje se: