Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Classe Hashtable

 

Data di pubblicazione: ottobre 2016

Rappresenta una raccolta di coppie chiave/valore organizzate in base al codice hash della chiave.

Per esaminare il codice sorgente di .NET Framework per questo tipo, vedere il Reference Source.

Spazio dei nomi:   System.Collections
Assembly:  mscorlib (in mscorlib.dll)


[SerializableAttribute]
[ComVisibleAttribute(true)]
public class Hashtable : IDictionary, ICollection, IEnumerable, 
	ISerializable, IDeserializationCallback, ICloneable

NomeDescrizione
System_CAPS_pubmethodHashtable()

Inizializza una nuova istanza vuota della classe Hashtable usando la capacità iniziale, il fattore di carico, il provider di codice hash e l'operatore di confronto predefiniti.

System_CAPS_pubmethodHashtable(IDictionary)

Inizializza una nuova istanza della classe Hashtable copiando gli elementi dal dizionario specificato nel nuovo oggetto Hashtable. Il nuovo oggetto Hashtable ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico, il provider di codice hash e l'operatore di confronto predefiniti.

System_CAPS_pubmethodHashtable(IDictionary, IEqualityComparer)

Inizializza una nuova istanza della classe Hashtable copiando gli elementi dal dizionario specificato in un nuovo oggetto Hashtable. Il nuovo oggetto Hashtable ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico predefinito e l'oggetto IEqualityComparer specificato.

System_CAPS_pubmethodHashtable(IDictionary, IHashCodeProvider, IComparer)

Obsoleto.Inizializza una nuova istanza della classe Hashtable copiando gli elementi dal dizionario specificato nel nuovo oggetto Hashtable. Il nuovo oggetto Hashtable ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico predefinito e il provider di codice hash e l'operatore di confronto specificati. Questa API è obsoleta. Per un'alternativa, vedere Hashtable.

System_CAPS_pubmethodHashtable(IDictionary, Single)

Inizializza una nuova istanza della classe Hashtable copiando gli elementi dal dizionario specificato nel nuovo oggetto Hashtable. Il nuovo oggetto Hashtable ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico specificato e il provider di codice hash e l'operatore di confronto predefiniti.

System_CAPS_pubmethodHashtable(IDictionary, Single, IEqualityComparer)

Inizializza una nuova istanza della classe Hashtable copiando gli elementi dal dizionario specificato nel nuovo oggetto Hashtable. Il nuovo oggetto Hashtable ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico e l'oggetto IEqualityComparer specificati.

System_CAPS_pubmethodHashtable(IDictionary, Single, IHashCodeProvider, IComparer)

Obsoleto.Inizializza una nuova istanza della classe Hashtable copiando gli elementi dal dizionario specificato nel nuovo oggetto Hashtable. Il nuovo oggetto Hashtable ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico, il provider di codice hash e l'operatore di confronto specificati.

System_CAPS_pubmethodHashtable(IEqualityComparer)

Inizializza una nuova istanza vuota della classe Hashtable usando la capacità iniziale e il fattore di carico predefiniti e l'oggetto IEqualityComparer specificato.

System_CAPS_pubmethodHashtable(IHashCodeProvider, IComparer)

Obsoleto.Inizializza una nuova istanza vuota della classe Hashtable usando la capacità iniziale e il fattore di carico predefiniti e il provider di codice hash e l'operatore di confronto specificati.

System_CAPS_pubmethodHashtable(Int32)

Inizializza una nuova istanza vuota della classe Hashtable usando la capacità iniziale specificata e il fattore di carico, il provider di codice hash e l'operatore di confronto predefiniti.

System_CAPS_pubmethodHashtable(Int32, IEqualityComparer)

Inizializza una nuova istanza vuota della classe Hashtable usando la capacità iniziale e l'interfaccia IEqualityComparer specificate e il fattore di carico predefinito.

System_CAPS_pubmethodHashtable(Int32, IHashCodeProvider, IComparer)

Obsoleto.Inizializza una nuova istanza vuota della classe Hashtable usando la capacità iniziale, il provider di codice hash e l'operatore di confronto specificati e il fattore di carico predefinito.

System_CAPS_pubmethodHashtable(Int32, Single)

Inizializza una nuova istanza vuota della classe Hashtable usando la capacità iniziale e il fattore di carico specificati e il provider di codice hash e l'operatore di confronto predefiniti.

System_CAPS_pubmethodHashtable(Int32, Single, IEqualityComparer)

Inizializza una nuova istanza vuota della classe Hashtable usando la capacità iniziale, il fattore di carico e l'oggetto IEqualityComparer specificati.

System_CAPS_pubmethodHashtable(Int32, Single, IHashCodeProvider, IComparer)

Obsoleto.Inizializza una nuova istanza vuota della classe Hashtable usando la capacità iniziale, il fattore di carico, il provider di codice hash e l'operatore di confronto specificati.

System_CAPS_protmethodHashtable(SerializationInfo, StreamingContext)

Inizializza una nuova istanza vuota della classe Hashtable che è serializzabile tramite gli oggetti SerializationInfo e StreamingContext specificati.

NomeDescrizione
System_CAPS_protpropertycomparer

Obsoleto.Ottiene o imposta l'oggetto IComparer da usare per Hashtable.

System_CAPS_pubpropertyCount

Ottiene il numero di coppie chiave/valore contenute in Hashtable.

System_CAPS_protpropertyEqualityComparer

Ottiene l'interfaccia IEqualityComparer da usare per la classe Hashtable.

System_CAPS_protpropertyhcp

Obsoleto.Ottiene o imposta l'oggetto dal quale verranno distribuiti i codici hash.

System_CAPS_pubpropertyIsFixedSize

Ottiene un valore che indica se Hashtable ha dimensioni fisse.

System_CAPS_pubpropertyIsReadOnly

Ottiene un valore che indica se Hashtable è di sola lettura.

System_CAPS_pubpropertyIsSynchronized

Ottiene un valore che indica se l'accesso a Hashtable è sincronizzato (thread-safe).

System_CAPS_pubpropertyItem[Object]

Ottiene o imposta il valore associato alla chiave specificata.

System_CAPS_pubpropertyKeys

Ottiene un oggetto ICollection contenente le chiavi presenti nell'oggetto Hashtable.

System_CAPS_pubpropertySyncRoot

Ottiene un oggetto che può essere usato per sincronizzare l'accesso a Hashtable.

System_CAPS_pubpropertyValues

Ottiene ICollection contenente i valori in Hashtable.

NomeDescrizione
System_CAPS_pubmethodAdd(Object, Object)

Aggiunge un elemento con la chiave e il valore specificati al metodo Hashtable.

System_CAPS_pubmethodClear()

Rimuove tutti gli elementi da Hashtable.

System_CAPS_pubmethodClone()

Crea una copia superficiale di Hashtable.

System_CAPS_pubmethodContains(Object)

Determina se l'oggetto Hashtable contiene una chiave specifica.

System_CAPS_pubmethodContainsKey(Object)

Determina se l'oggetto Hashtable contiene una chiave specifica.

System_CAPS_pubmethodContainsValue(Object)

Stabilisce se Hashtable contiene un valore specifico.

System_CAPS_pubmethodCopyTo(Array, Int32)

Copia gli elementi della classe Hashtable gli elementi della classe Array unidimensionale in corrispondenza dell'indice specificato.

System_CAPS_pubmethodEquals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object.)

System_CAPS_protmethodFinalize()

Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulizia prima che l'oggetto stesso venga reclamato dalla procedura di Garbage Collection. (Ereditato da Object.)

System_CAPS_pubmethodGetEnumerator()

Restituisce un oggetto IDictionaryEnumerator che esegue l'iterazione di Hashtable.

System_CAPS_protmethodGetHash(Object)

Restituisce il codice hash per la chiave specificata.

System_CAPS_pubmethodGetHashCode()

Funge da funzione hash predefinita.(Ereditato da Object.)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Implementa l'interfaccia ISerializable restituendo i dati necessari per serializzare la Hashtable.

System_CAPS_pubmethodGetType()

Ottiene l'oggetto Type dell'istanza corrente.(Ereditato da Object.)

System_CAPS_protmethodKeyEquals(Object, Object)

Confronta un Object specifico con una chiave specifica nella Hashtable.

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.(Ereditato da Object.)

System_CAPS_pubmethodOnDeserialization(Object)

Implementa l'interfaccia ISerializable e genera l'evento di deserializzazione quando la deserializzazione è completa.

System_CAPS_pubmethodRemove(Object)

Rimuove l'elemento con la chiave specificata da Hashtable.

System_CAPS_pubmethodSystem_CAPS_staticSynchronized(Hashtable)

Restituisce un wrapper sincronizzato (thread-safe) per la classe Hashtable.

System_CAPS_pubmethodToString()

Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object.)

NomeDescrizione
System_CAPS_pubinterfaceSystem_CAPS_privmethodIEnumerable.GetEnumerator()

Restituisce un enumeratore che consente di eseguire l'iterazione di una raccolta.

NomeDescrizione
System_CAPS_pubmethodAsParallel()

Sottoposto a overload. Consente la parallelizzazione di una query.(Definito da ParallelEnumerable.)

System_CAPS_pubmethodAsQueryable()

Sottoposto a overload. Converte un IEnumerable a un IQueryable.(Definito da Queryable.)

System_CAPS_pubmethodCast<TResult>()

Esegue il cast di elementi di un IEnumerable nel tipo specificato.(Definito da Enumerable.)

System_CAPS_pubmethodOfType<TResult>()

Filtra gli elementi di un IEnumerable in base a un tipo specificato.(Definito da Enumerable.)

System_CAPS_noteNota

Per visualizzare il codice sorgente di .NET Framework per questo tipo, vedere il Reference Source. È possibile esplorare il codice sorgente online, scaricare i riferimenti per la visualizzazione offline e scorrere le origini (inclusi aggiornamenti e patch) durante l'esecuzione del debug. see instructions.

Ogni elemento è una coppia chiave/valore archiviata in un DictionaryEntry oggetto. Una chiave non può essere null, ma può essere un valore.

Gli oggetti utilizzati come chiavi da un Hashtable necessario eseguire l'override di Object.GetHashCode (metodo) (o IHashCodeProvider interfaccia) e il Object.Equals (metodo) (o IComparer interfaccia). L'implementazione di entrambe le interfacce e metodi deve gestire distinzione maiuscole/minuscole nello stesso modo; in caso contrario, il Hashtable potrebbe comportarsi in modo non corretto. Ad esempio, quando si crea un Hashtable, è necessario utilizzare il CaseInsensitiveHashCodeProvider classe (o qualsiasi tra maiuscole e minuscole IHashCodeProvider implementazione) con la CaseInsensitiveComparer classe (o qualsiasi tra maiuscole e minuscole IComparer implementazione).

Inoltre, questi metodi devono produrre gli stessi risultati quando viene chiamato con gli stessi parametri, mentre la chiave esiste nella Hashtable. In alternativa è possibile utilizzare un Hashtable costruttore con un IEqualityComparer parametro. Se l'uguaglianza delle chiavi è semplicemente l'uguaglianza di riferimento, l'implementazione ereditata di Object.GetHashCode e Object.Equals dovrebbe essere sufficiente.

Gli oggetti chiave devono essere non modificabili come vengono utilizzati come chiavi di Hashtable.

Quando si aggiunge un elemento per il Hashtable, l'elemento viene inserito in un bucket in base al codice hash della chiave. Le ricerche successive della chiave di utilizzano il codice hash della chiave per la ricerca in un solo determinato bucket, riducendo notevolmente il numero di confronti chiave necessari per trovare un elemento.

Il fattore di caricamento di un Hashtable determina il rapporto massimo tra elementi e bucket. Fattori di carico più piccoli causano tempi di tempi di ricerca medi al costo di maggiore utilizzo di memoria. Il fattore di carico predefinito pari a 1,0 in genere fornisce il miglior equilibrio tra velocità e dimensioni. Un fattore di carico diversi può anche essere specificato quando il Hashtable viene creato.

Quando gli elementi vengono aggiunti a un Hashtable, il fattore di carico effettivo del Hashtable aumenta. Quando il fattore di carico effettivo raggiunge il fattore di carico, il numero di bucket di Hashtable viene automaticamente aumentato il più piccolo numero primo è maggiore di due volte il numero corrente di Hashtable bucket.

Ogni oggetto nella chiave di Hashtable deve fornire la propria funzione hash, che sono accessibili tramite la chiamata GetHash. Tuttavia, qualsiasi oggetto che implementa IHashCodeProvider può essere passato a un Hashtable costruttore e funzione hash viene utilizzata per tutti gli oggetti nella tabella.

La capacità di un Hashtable è il numero di elementi di Hashtable può contenere. Quando gli elementi vengono aggiunti a un Hashtable, la capacità viene aumentata automaticamente in base alle necessità, tramite riallocazione.

Per grandi Hashtable oggetti, è possibile aumentare la capacità massima a 2 miliardi di elementi in un sistema a 64 bit impostando il enabled attributo dell'elemento di configurazione per true nell'ambiente di runtime.

Il foreach istruzione del linguaggio c# (For Each in Visual Basic) restituisce un oggetto del tipo degli elementi nella raccolta. Poiché ogni elemento di Hashtable è una coppia chiave/valore, il tipo di elemento non è il tipo della chiave o il tipo del valore. Al contrario, il tipo di elemento è DictionaryEntry. Ad esempio:

foreach(DictionaryEntry de in myHashtable)
{
    // ...
}

Il foreach istruzione è un wrapper per l'enumeratore, che consente solo di leggere da, non la scrittura alla raccolta.

Poiché la serializzazione e deserializzazione di un enumeratore per un Hashtable può causare i riordinamento degli elementi, non è possibile continuare l'enumerazione senza chiamare il Reset metodo.

System_CAPS_noteNota

Poiché le chiavi possono essere ereditate e modificato il comportamento, non è possibile garantirne l'univocità assoluta mediante confronti eseguiti utilizzando il Equals metodo.

Nell'esempio seguente viene illustrato come creare, inizializzare ed eseguire varie funzioni su un Hashtable e come stampare i relativi valori e chiavi.

using System;
using System.Collections;

class Example
{
    public static void Main()
    {
        // Create a new hash table.
        //
        Hashtable openWith = new Hashtable();

        // Add some elements to the hash table. There are no 
        // duplicate keys, but some of the values are duplicates.
        openWith.Add("txt", "notepad.exe");
        openWith.Add("bmp", "paint.exe");
        openWith.Add("dib", "paint.exe");
        openWith.Add("rtf", "wordpad.exe");

        // The Add method throws an exception if the new key is 
        // already in the hash table.
        try
        {
            openWith.Add("txt", "winword.exe");
        }
        catch
        {
            Console.WriteLine("An element with Key = \"txt\" already exists.");
        }

        // The Item property is the default property, so you 
        // can omit its name when accessing elements. 
        Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);

        // The default Item property can be used to change the value
        // associated with a key.
        openWith["rtf"] = "winword.exe";
        Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);

        // If a key does not exist, setting the default Item property
        // for that key adds a new key/value pair.
        openWith["doc"] = "winword.exe";

        // ContainsKey can be used to test keys before inserting 
        // them.
        if (!openWith.ContainsKey("ht"))
        {
            openWith.Add("ht", "hypertrm.exe");
            Console.WriteLine("Value added for key = \"ht\": {0}", openWith["ht"]);
        }

        // When you use foreach to enumerate hash table elements,
        // the elements are retrieved as KeyValuePair objects.
        Console.WriteLine();
        foreach( DictionaryEntry de in openWith )
        {
            Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
        }

        // To get the values alone, use the Values property.
        ICollection valueColl = openWith.Values;

        // The elements of the ValueCollection are strongly typed
        // with the type that was specified for hash table values.
        Console.WriteLine();
        foreach( string s in valueColl )
        {
            Console.WriteLine("Value = {0}", s);
        }

        // To get the keys alone, use the Keys property.
        ICollection keyColl = openWith.Keys;

        // The elements of the KeyCollection are strongly typed
        // with the type that was specified for hash table keys.
        Console.WriteLine();
        foreach( string s in keyColl )
        {
            Console.WriteLine("Key = {0}", s);
        }

        // Use the Remove method to remove a key/value pair.
        Console.WriteLine("\nRemove(\"doc\")");
        openWith.Remove("doc");

        if (!openWith.ContainsKey("doc"))
        {
            Console.WriteLine("Key \"doc\" is not found.");
        }
    }
}

/* This code example produces the following output:

An element with Key = "txt" already exists.
For key = "rtf", value = wordpad.exe.
For key = "rtf", value = winword.exe.
Value added for key = "ht": hypertrm.exe

Key = dib, Value = paint.exe
Key = txt, Value = notepad.exe
Key = ht, Value = hypertrm.exe
Key = bmp, Value = paint.exe
Key = rtf, Value = winword.exe
Key = doc, Value = winword.exe

Value = paint.exe
Value = notepad.exe
Value = hypertrm.exe
Value = paint.exe
Value = winword.exe
Value = winword.exe

Key = dib
Key = txt
Key = ht
Key = bmp
Key = rtf
Key = doc

Remove("doc")
Key "doc" is not found.
 */

Universal Windows Platform
Disponibile da 10
.NET Framework
Disponibile da 1.1

Hashtable è thread-safe per l'utilizzo da più thread di lettura e un singolo thread di scrittura. È thread-safe per utilizzare multi-thread quando solo uno dei thread di eseguire le operazioni di scrittura (aggiornamento), che consentono letture senza blocchi purché i writer vengano serializzati per il Hashtable. Per supportare più writer tutte le operazioni sul Hashtable devono essere eseguite tramite il wrapper restituito dal Synchronized (metodo), purché siano thread che leggono il Hashtable oggetto.

L'enumerazione di una raccolta non è quindi una procedura thread-safe. Anche se una raccolta è sincronizzata, è possibile che venga modificata da altri thread, con conseguente generazione di un'eccezione da parte dell'enumeratore. Per garantire la protezione dei thread durante l'enumerazione, è possibile bloccare la raccolta per l'intera enumerazione oppure intercettare le eccezioni determinate dalle modifiche apportate da altri thread.

Torna all'inizio
Mostra: