Tipi di Collection Hashtable e DictionaryHashtable and Dictionary Collection Types

La classe System.Collections.Hashtable e le classi generiche System.Collections.Generic.Dictionary<TKey,TValue> e System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> implementano l'interfaccia System.Collections.IDictionary.The System.Collections.Hashtable class, and the System.Collections.Generic.Dictionary<TKey,TValue> and System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> generic classes, implement the System.Collections.IDictionary interface. La classe generica Dictionary<TKey,TValue> implementa inoltre l'interfaccia generica IDictionary<TKey,TValue>.The Dictionary<TKey,TValue> generic class also implements the IDictionary<TKey,TValue> generic interface. Ogni elemento di queste raccolte è pertanto una coppia chiave-valore.Therefore, each element in these collections is a key-and-value pair.

Un oggetto Hashtable è costituito da bucket che contengono gli elementi della raccolta.A Hashtable object consists of buckets that contain the elements of the collection. Un bucket è un sottogruppo virtuale di elementi all'interno di Hashtable, che rende più semplici e veloci le operazioni di ricerca e recupero rispetto alla maggior parte delle raccolte.A bucket is a virtual subgroup of elements within the Hashtable, which makes searching and retrieving easier and faster than in most collections. Ogni bucket è associato a un codice hash, generato usando una funzione hash ed basato sulla chiave dell'elemento.Each bucket is associated with a hash code, which is generated using a hash function and is based on the key of the element.

La classe generica HashSet<T> è una raccolta non ordinata destinata a contenere elementi univoci.The generic HashSet<T> class is an unordered collection for containing unique elements.

Una funzione hash è un algoritmo che restituisce un codice hash numerico basato su una chiave.A hash function is an algorithm that returns a numeric hash code based on a key. La chiave è il valore di una proprietà dell'oggetto che viene archiviato.The key is the value of some property of the object being stored. Una funzione hash deve sempre restituire lo stesso codice hash per la stessa chiave.A hash function must always return the same hash code for the same key. È possibile per una funzione hash generare lo stesso codice hash per due chiavi diverse, ma una funzione hash che genera un codice hash univoco per ogni chiave univoca offre prestazioni migliori durante il recupero di elementi dalla tabella hash.It is possible for a hash function to generate the same hash code for two different keys, but a hash function that generates a unique hash code for each unique key results in better performance when retrieving elements from the hash table.

Ogni oggetto usato come elemento in un oggetto Hashtable deve essere in grado di generare un codice hash per se stesso tramite un'implementazione del metodo GetHashCode.Each object that is used as an element in a Hashtable must be able to generate a hash code for itself by using an implementation of the GetHashCode method. È tuttavia anche possibile specificare una funzione hash per tutti gli elementi in un oggetto Hashtable usando un costruttore Hashtable che accetta un'implementazione di IHashCodeProvider come uno dei parametri.However, you can also specify a hash function for all elements in a Hashtable by using a Hashtable constructor that accepts an IHashCodeProvider implementation as one of its parameters.

Quando un oggetto viene aggiunto a Hashtable, viene archiviato nel bucket associato al codice hash corrispondente al codice hash dell'oggetto.When an object is added to a Hashtable, it is stored in the bucket that is associated with the hash code that matches the object's hash code. Quando viene cercato un valore in Hashtable, viene generato il codice hash per tale valore e viene eseguita la ricerca nel bucket associato a tale codice hash.When a value is being searched for in the Hashtable, the hash code is generated for that value, and the bucket associated with that hash code is searched.

Ad esempio, una funzione hash per una stringa potrebbe prendere i codici ASCII di ogni carattere della stringa e combinarli per generare un codice hash.For example, a hash function for a string might take the ASCII codes of each character in the string and add them together to generate a hash code. La stringa "picnic" avrebbe un codice hash diverso da quello della stringa "basket", pertanto le due stringhe si troverebbero in bucket diversi.The string "picnic" would have a hash code that is different from the hash code for the string "basket"; therefore, the strings "picnic" and "basket" would be in different buckets. "Stressed" e "desserts" avrebbero invece lo stesso codice hash e si troverebbero nello stesso bucket.In contrast, "stressed" and "desserts" would have the same hash code and would be in the same bucket.

Le classi Dictionary<TKey,TValue> e ConcurrentDictionary<TKey,TValue> hanno la stessa funzionalità della classe Hashtable.The Dictionary<TKey,TValue> and ConcurrentDictionary<TKey,TValue> classes have the same functionality as the Hashtable class. Un oggetto Dictionary<TKey,TValue> di un tipo specifico (diverso da Object) offre prestazioni migliori rispetto a un oggetto Hashtable per i tipi di valore,A Dictionary<TKey,TValue> of a specific type (other than Object) provides better performance than a Hashtable for value types. in quanto gli elementi di Hashtable sono di tipo Object. Le conversioni boxing e unboxing vengono in genere eseguite quando si archivia o si recupera un tipo di valore.This is because the elements of Hashtable are of type Object; therefore, boxing and unboxing typically occur when you store or retrieve a value type. La classe ConcurrentDictionary<TKey,TValue> deve essere usata quando più thread potrebbero accedere contemporaneamente alla raccolta.The ConcurrentDictionary<TKey,TValue> class should be used when multiple threads might be accessing the collection simultaneously.

Vedere ancheSee Also

Hashtable
IDictionary
IHashCodeProvider
Dictionary<TKey,TValue>
System.Collections.Generic.IDictionary<TKey,TValue>
System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue>
Tipi di raccolte comunemente utilizzateCommonly Used Collection Types