Skillnad mellan ordbok och Hashtable

Ordbok vs Hashtable

Ordboken är typad (så värderingstyper behöver inte bоxing), en Hashtable är inte (så värderingstyper behöver bоxing). Hashtable har ett trevligare sätt att få ett värde än ordboken IMHО, eftersom det alltid är värdet är ett objekt. Om du använder .NET 3.5, är det lätt att skriva en utökad metod för ordbok för att få liknande beteende.

Hashtable-klassen är en specifik typ av ordboksklass som använder ett heltal värde (kallat en hash) för att hjälpa till med dess tangenter. Hashtable-klassen använder hash för att påskynda sökningen efter en viss nyckel i kategorin. Varje objekt i .NET härrör från Оbject-klassen. Denna klass motsvarar GetHash-metoden, som returnerar ett heltal som unikt identifierar objektet. Hashtable-klassen är en mycket effektiv samling i allmänhet. Det enda problemet med Hashtable-klassen är att det kräver lite av huvudet och för små grupper (färre än tio element) kan huvudet hindra perfomrance.

Det finns en betydande skillnad mellan en HashTable och Dictionary. Om du använder indexers för att få ett värde av en HashTable, returnerar HashTable noll till ett existerande föremål, medan ordlistan kommer att bli en felaktig om du försöker komma åt ett objekt med en indexer som inte finns i Dictionary.

HashTable är basklassen som är svagt skrivet; DictionaryBase abstract klassen är typiskt skrivet och använder internt en HashTable.

En konstig sak märkt över Dictionary är, när vi lägger till flera poster i ordboken, behålls den del där posterna läggs till. Således om du tillämpar en ordbok i ordboken, får du recensionerna i samma sak som du har lagt in dem. Men det här är inte sant med nyfiken HashTable, när du lägger till samma resonter i Hashtable, fortsätter inte den andra. Om "Ordboken är baserad på Hashtable" är sant, varför ordbok upprätthåller ordet men HashTable de inte?

Som en följd av att de uppför sig annorlunda beror det på att Generic Dictionary implementerar en hashtable, men är inte baserad på System.Collectios.Hashtable. Generic Dictionary implementationen är baserad på all-encoding nyckel-värde-par från en lista. Dessa indexeras sedan med hashtable-hinkarna för Random Access, men när den returnerar en enumeration, går den bara i listan i sekvensiell ordning - vilket kommer att vara det första alternativet så länge som inmatningarna inte återanvänds.