Differenza tra dizionario e Hashtable

Dizionario vs Hashtable

Il dizionario è dattiloscritto (così come i tipi di valore non hanno bisogno di bxing), un Hashtable non lo è (per cui i tipi di valori richiedono il borking). Hashtable ha un modo più bello di ottenere un valore rispetto al dizionario IMH, perché rileva sempre che il valore è un oggetto. Se stai usando .NET 3.5, è facile scrivere un dizionario estensivo per ottenere un comportamento simile.

La classe Hashtable è un tipo specifico di classe del dizionario che utilizza un valore intero (chiamato hash) per aiutare nello storno delle sue chiavi. La classe Hashtable utilizza l'hash per accelerare la ricerca per una chiave specifica nella finestra alternativa. Ogni oggetto in. NET deriva dalla classe Оbject. Questa classe suppone il metodo GetHash, che restituisce un intero che identifica in modo univoco l'oggetto. La classe Hashtable è una soluzione molto efficiente in generale. Il solo problema con la classe Hashtable è che richiede un po 'di testa, e per piccoli oggetti (meno di dieci elementi) l'overhead può impedire la perfomance.

C'è una differenza più importante tra un HashTable e un dizionario. Se si usano gli indicizzatori per ottenere un valore su una HashTable, HashTable restituirà null per un elemento non esistente, mentre il dizionario avrà un errore se si tenta di accedere a un elemento utilizzando un indicizzatore che non esiste nel dizionario..

HashTable è la classe base che è debolmente tipizzata; la classe astratta DictionaryBase è tipicamente scritta e utilizza internamente una HashTable.

Una cosa strana che si nota sul dizionario è che, quando aggiungiamo le voci multiple nel dizionario, viene mantenuto l'analista in cui vengono aggiunte le voci. Pertanto, se si applica un approccio al dizionario, si ottengono i riferimenti nello stesso utente in cui sono stati inseriti. Considerando che, questo non è vero con HashTable, quando si aggiungono gli stessi riferimenti in Hashtable, l'analizzatore non viene mantenuto. Se "Il dizionario è basato su Hashtable" è vero, perché il dizionario gestisce il più vecchio ma HashTable non lo fa?

Per il motivo per cui si comportano diversamente, è perché il dizionario generico implementa un hashtable, ma non è basato su System.Cоllectiоns.Hashtable. Il dizionario generico implementato si basa su tutte le coppie chiave-valore da una lista. Questi sono poi indicizzati con i bucket hashtable per l'accesso random, ma quando restituisce un enumerator, passa l'elenco solo in ordine sequenziale - che sarà l'elemento di inserzione come se le voci non vengano riutilizzate.