Razlika Između Rječnika I Hashtable-a

Razlika Između Rječnika I Hashtable-a
Razlika Između Rječnika I Hashtable-a

Video: Razlika Između Rječnika I Hashtable-a

Video: Razlika Između Rječnika I Hashtable-a
Video: Хеш-таблицы в C # - как и когда использовать? 2024, Svibanj
Anonim

Rječnik vs Hashtable

Rječnik se upisuje (tako da vrijednosti ne trebaju boksanje), a Hashtable ne (tako vrijednosne tipove treba zaštititi). Hashtable ima ljepši način dobivanja vrijednosti od rječnika IMHO, jer uvijek zna da je vrijednost objekt. Ako koristite. NET 3.5, lako je napisati prošireni metod za rječnik da biste dobili slično ponašanje.

Klasa Hashtable specifična je vrsta klase rječnika koja koristi cjelobrojnu vrijednost (koja se naziva hash) za pomoć u pohrani svojih ključeva. Klasa Hashtable koristi hash za ubrzavanje pretraživanja za određenim ključem u kolekciji. Svaki objekt u. NET-u potječe 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činkovit kolektiv. Jedino je pitanje klase Hashtable to što joj je potrebno malo više glave, a za male kolekcije (manje od deset elemenata) gornja glava može ometati izvedbu.

Postoji još jedna najvažnija razlika između HashTable-a i Rječnika. Ako upotrebljavate indeksere za dobivanje vrijednosti HashTable-a, HashTable će uspješno vratiti nulu za nepostojeću stavku, dok će Rječnik otkriti pogrešku ako pokušate pristupiti stavci pomoću indeksatora koji u Rječniku ne postoji.

HashTable je osnovna klasa koja je slabo otkucana; apstraktna klasa DictionaryBase samo se tipka i interno koristi HashTable.

Čudna stvar uočena kod Rječnika je da, kada dodamo više unosa u Rječnik, redoslijed u koji se dodaju unosi se održava. Stoga, ako primijenite pristup na Rječnik, dobit ćete zapise u istom redoslijedu u koji ste ih umetnuli. To, međutim, nije točno s uobičajenim HashTable-om, kada dodate iste zapise u Hashtable-u, nalog se ne održava. Ako je 'Rječnik zasnovan na Hashtableu' istinit, zašto Rječnik održava nalog, ali HashTable ne?

Kao razlog zašto se ponašaju drugačije, to je zato što Generički rječnik implementira hashtable, ali se ne temelji na System. Collections. Hashtable. Implementacija Generičkog rječnika temelji se na svim parovima ključ / vrijednost s popisa. Zatim se indeksiraju heširajućim segmentima za slučajni pristup, ali kada vrati broj, on samo šeće popisom u slijedu - koji će biti nalog za umetanje onoliko dugo koliko se unosi više ne koriste.

Preporučeno: