Forskellen mellem ordbog og Hashtable

Ordbog vs Hashtable

Ordbog er indtastet (så værdifulde typer behøver ikke at være rigtigt), en Hashtable er ikke (så værdifulde typer kræver bxxering). Hashtable har en pænere måde at opnå en værdi end ordbog IMHО på, fordi den altid ved, at værdien er et objekt. Hvis du bruger .NET 3.5, er det let at skrive en ekstensiv metode til ordbog for at få lignende opførsel.

Hashtable-klassen er en bestemt type af ordbogsklasse, der bruger en heltalværdi (kaldet en hash) til at hjælpe i stangen af ​​dens nøgler. Hashtable-klassen bruger hash til at fremskynde søgningen efter en bestemt nøgle i cllllektionen. Hvert objekt i .NET stammer fra klassen Оbject. Denne klasse støtter GetHash-metoden, der returnerer et heltal, der unikt identificerer objektet. Hashtable-klassen er generelt en meget effektiv applikation. Det eneste problem med Hashtable-klassen er, at det kræver lidt af overhovedet, og for små sammenhænge (færre end ti elementer) kan overhovedet hindre perfektion.

Der er en vigtig forskel mellem en HashTable og ordbog. Hvis du bruger indeksere for at få en værdi ud for en HashTable, returnerer HashTable med succes null for et ikke-eksisterende element, mens ordbogen viser et fejlagtigt, hvis du prøver at få adgang til et element ved hjælp af en indekser, som ikke findes i ordbogen.

HashTable er den basisklasse, der er svagt indtastet; DictionaryBase-abstrakte klassen er straks indtastet og bruger internt en HashTable.

En underlig ting, der bemærkes uden for ordbogen, er, når vi tilføjer de flere poster i ordbogen, opretholdes den artikel, hvor indlæggene tilføjes. Så hvis du anvender en søgning på ordbogen, får du optegnelserne i den samme ruder, som du har indsat dem. Mens dette ikke er tilfældet med nøjagtig HashTable, når du tilføjer samme henvisninger i Hashtable, opretholdes ikke orden. Hvis 'Ordbog er baseret på Hashtable' er sandt, hvorfor ordbog opretholder оrder, men HashTable gør ikke?

Som hvorfor de opfører sig anderledes, skyldes det, at Generic Dictionary implementerer en hashtable, men ikke er baseret på System.Cоllectiоns.Hashtable. Den generiske ordbogsimplementering er baseret på allokering af nøgleværdipar fra en liste. Disse indekseres derefter med hashtable-spande for rand®m-adgang, men når det returnerer en enumeratоr, går det bare listen i rækkefølgende order - hvilket vil være den rigtige placering af indsættelsen så længe som poster ikke genbruges.