Razlika med slovarjem in Hashtable

Slovar vs Hashtable

Slovar je vpisan (s valuetypes, da ne potrebujejo bxxinga), Hashtable pa ni (s valuetypes je treba prepisovati). Hashtable ima lepši način za pridobitev vrednosti kot slovar IMHO, saj vedno pozna vrednost kot objekt. Če uporabljate .NET 3.5, lahko preprosto napišete razširitev za slovar in podobno vedenje.

Razred Hashtable je poseben tip slovarskega razreda, ki uporablja pomnoževalno vrednost (imenovano hash) za pomoč pri shranjevanju svojih tipk. Razred Hashtable uporablja hash, da pospeši iskanje po določenem ključu v kolektivu. Vsak objekt v .NET izhaja iz razreda Object. Ta razred podpira metod GetHash, ki vrne celo število, ki enolično identificira objekt. Hashtable razred je na splošno zelo učinkovit kolektik. Edina težava razreda Hashtable je ta, da potrebuje nekaj nad glavo in za majhne kolektike (manj kot deset elementov), ​​ki jih lahko ovira pri izvedbi.

Med HashTable in slovarjem obstaja ena pomembna razlika. Če uporabljate kazalnike, da dobite vrednost za HashTable, bo HashTable uspešno vrnil ničelno vrednost za neobstoječ element, medtem ko bo slovar zmotil napako, če poskusite dostop do elementa z uporabo indeksatorja, ki v slovarju ne obstaja..

HashTable je osnovni razred, ki je šibko vtipkan; abstraktni razred DictionaryBase je strogo vtipkan in interno uporablja HashTable.

Nenavadna stvar, ki jo opazimo ob slovarju, je, ko dodamo več vnosov v slovar, ohrani se vrstnik, v katerega so dodani vnosi. Če torej uporabite slovar, boste dobili recorde v istem postopku, kot ste jih vstavili. Medtem ko to ni res z normalnim HashTable-om, ko v Hashtable dodate enake zapise, naročil ni vzdrževan. Če je 'Slovar osnovan na Hashtable', je res, zakaj Slovar vzdržuje boljše, HashTable pa ne?

Zakaj se drugače obnašajo, je to, ker Generic Dictionary uveljavlja mešanico, vendar ne temelji na sistemu System.Coollectiоns.Hashtable. Izvedba Generičnega slovarja temelji na vsebovanju parov ključ-vrednost s seznama. Te se nato indeksirajo z vedri, ki jih je mogoče pritikati do dostopa do randoma, ko pa vrne seznam, le odpre seznam v zaporednem naročilu - ki bo v nadaljevanju vstavljen, če se vnosi ne uporabijo več.