Nel Framework .NET è presente un’altra struttura dati molto importante, oltre agli ArrayList visti nella scorsa lezione di questo corso sul linguaggio C# ( sharp ), le Hashtable. Questa struttura contiene gli oggetti come coppie chiave-valore, ogni oggetto nella struttura è quindi individuabile tramite la sua chiave. Quest’ultima non può essere un valore nullo, mentre l’oggetto associato si. Gli oggetti utilizzati come chiave devono implementare i metodi GetHashCode ed Equals, che sono necessari per costruire la tabella interna dell’Hashtable e sono necessari per l’organizzazione della struttura dati. Quando un oggetto viene inserito nell’Hashtable, in pratica viene immesso nel “cestino” relativo al codice hash della chiave fornita. Un cestino ( bucket ) è una zona di memoria che può contenere uno o più oggetti. Al momento dell’inserimento dei dati viene verificato il codice hash della chiave ed identificato nel cestino relativo ed una volta individuato viene inserito in quest’ultimo. Per la ricerca si utilizza il valore di hash della chiave per identificare uno specifico cestino, in questo modo si riducono sostanzialmente il numero dei confronti di chiavi necessario per individuare l’elemento richiesto. Una proprietà fondamentale delle Hashtable è il fattore di carico ( load factor ) che determina il rapporto massimo tra il numero di elementi ed il numero dei cestini. Con fattori di carico bassi le ricerche avvengono più velocemente, ma si occupa più memoria. Con fattori di carico alti le ricerche sono più lente, ma si occupa meno memoria. Il valore standard per il fattore di carico è 1.0, che garantisce un buon rapporto tra velocità e consumo di memoria.
Vediamo ora i metodi più importanti per l’oggetto Hashtable:
Vediamo un esempio nel quale inseriamo alcuni valori in una Hashtable e quindi li stampiamo:
using System; using System.Collections; public class Corso { static void Main(string[] args) { Hashtable myHash = new Hashtable(); // Ogni riferimento a persone è casuale myHash.Add("studente1", "Mario Rossi"); myHash.Add("studente2", "Giovanni Bianchi"); myHash.Add("studente3", "Luigi Grigi"); myHash.Add("studente4", "Carlo Bruni"); myHash.Add("studente5", "Domenico Verdi"); // Iteriamo tutta la hash con un enumerator IDictionaryEnumerator myEnum = myHash.GetEnumerator(); while (myEnum.MoveNext()) Console.WriteLine("{0} => {1}", myEnum.Key, myEnum.Value); Console.WriteLine(""); // Stampiamo un valore del quale conosciamo la chiave if (myHash.ContainsKey("studente4")) Console.WriteLine(myHash["studente4"]); Console.ReadKey(); } }
Ho cercato di far vedere l’utilizzo delle Hastable in tutti i loro usi classici. Ricordo che per qualsiasi problema o istruzione non ben compresa potete fare domande e richiedere assistenza al nostro forum sul linguaggio C#.
<< Lezione Precedente – Inizio Corso – Indice Lezioni – Lezione Successiva >>
Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…
MerciGest è un software per la gestione del magazzino completamente gratuito. Continua a leggere→
In ufficio può capitare di doversi allontanare dal proprio posto di lavoro, ecco che allora…
In questo articolo vedremo quando è più o meno utile togliere la corrente ad un…
Dopo la pausa invernale dovuta al lavoro che devo fare per sostentarmi, eccomi di nuovo…
Vediamo come eliminare i files direttamente da Windows senza utilizzare il cestino. Continua a leggere→