Casino online











Mercato forex






A16. Arraylist, Hashtable e SortedList


Nella guida si è visto come sia possibile implementare strutture di uno stesso tipo di dato con gli array. Pur essendo molto utili e funzionali, non sempre sono la soluzione migliore per le vostre applicazioni. Potrebbe, ad esempio, esserci la necessità di immagazzinare dati di cui non si sappia a priori la quantità. Per questo è un ottimo sostituto l'ArrayList, che funziona allo steso modo di un array, ma dispone di alcune funzioni che facilitano moltissimo la stesura del programma.

Arraylist
L'arraylist è una classe, pertanto si istanzia come tale con la consueta sintassi:
Dim [nome] As New Arraylist 
Come l'array, possiamo accedere a ogni suo elemento tramite un indice:
Dim A As New Arraylist
'...
Console.WriteLine(A(3)) 
Per modificare gli elementi di un arraylist, ci sono queste utili procedure e funzioni:
  • Add(x) : aggiunge l'elemento x all'arraylist
  • Remove(x) : rimuove l'elemento x dall'arraylist
  • RemoveAt(x) : rimuove l'elemento che si trova nella posizione x dell'arraylist
  • IndexOf(x) : restituisce l'indice (ossia la posizione) dell'elemento x
  • Contains(x) : restituisce vero se x è contenuto nell'arraylist, altrimenti falso
  • Clear : pulisce l'arraylist eliminando ogni elemento
  • Clone : restituisce una copia esatta dell'arraylist
Ad esempio:
Dim B As New Arraylist
'Aggiunge due elementi
B.Add("Ciao")
B.Add("Buongiorno")
'Manda un messaggio con ogni elemento della lista
For Each S As String In B
  Console.WriteLine(S)
Next
'Rimuove l'elemento 'Ciao'
B.Remove("Ciao") 


Hashtable
L'Hashtable lavora quasi allo stesso modo, ma, invece di avere ogni elemento contraddistinto da un indice (numerico), ha ogni elemento contraddistinto da una chiave (stringa) che bisogna specificare come secondo parametro nella procedura Add e come unico parametro in Remove. Tuttavia ci sono alcuni metodi non presenti in un ArrayList, tra i quali troviamo:
  • ContainsKey(x) / ContainsValue(x) : restituisce vero se la chiave o il valori specificati sono presenti nell'hashtable
  • Keys / Values : restituisce un collezione di tutte le chiavi o di tutti i valore presenti nell'hashtable. È da tenere presente che il tipo di oggetto restituisto � ICollection, un'interfaccia che non supporta alcuna modifica, ma espone solamente i membri forniti e permette solamente l'enumerazione attraverso IEnumerator, che vedremo nella lezione sulle Interfacce. Quindi non è possibile modificare nè inserire alcun valore da queste collezioni, ma solo leggerne


SortedList
La potenza delle SortedList sta nel fatto che possono mantenere la lista degli elementi ordinata secondo la chiave: come l'hashtable, anche sortedlist supporta due array di chiavi e valori associati. Usa gli stessi metodi di hashtable e ne implementa altri:
  • GetByIndex(I) / GetKey(I) : restituisce il valore o la chiave posizionati all'indice I
  • IndexOfKey(O) / IndexOfValue(O) : restituisce l'indice della chiave O o del valore O
La SortedList ordina gli elementi confrontando le chiavi in modo Case-Sensitive, quindi le maiuscole e le minuscole vengono considerate lettere differenti. Se si vuole che il confronto avvenga a Case-Insensitive, bisogna generare una nuova SortedList dalla classe CollectionsUtil:
Dim S As SortedList = CollectionsUtil.CreateCaseInsensitiveSortedList() 
È anche possibile passare una classe derivata da IComparer per cambiare il metodo di ordinamento, ma questo è ancora un argomento da trattare più avanti.


Confronto
Facendo un confronto in termini di velocità, ArrayList risulta circa quattro volte più veloce di HashTable, mentre quest'ultimo è da otto a cento volte più veloce di SortedList. Quindi, con l'aumentare della potenza e della versatilità dell'oggetto diminuisce proporzionalmente anche la sua velocità, poichè aumentano le risorse richieste. Dove possibile, sarebbe meglio utilizzare la lista più veloce e meno onerosa in termini di risorse, quindi l'ArrayList.






 

The Totem's Lair - Copyright (C) 2009
È vietata la riproduzione sia totale che parziale del sito.