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:
Come l'array, possiamo accedere a ogni suo elemento tramite un indice:Dim [nome]As New Arraylist
Per modificare gli elementi di un arraylist, ci sono queste utili procedure e funzioni:Dim AAs New Arraylist'... Console.WriteLine(A(3))
- 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
Dim BAs New Arraylist'Aggiunge due elementi B.Add("Ciao") B.Add("Buongiorno")'Manda un messaggio con ogni elemento della lista For Each SAs String In B Console.WriteLine(S)Next 'Rimuove l'elemento ' B.Remove("Ciao")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
È anche possibile passare una classe derivata da IComparer per cambiare il metodo di ordinamento, ma questo è ancora un argomento da trattare più avanti.Dim SAs SortedList = CollectionsUtil.CreateCaseInsensitiveSortedList()
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.



