Che differenza c'è fra un array e un arraylist?
Bene, si possono usare le arraylist quando si devono ridimensionare arrays.
Infatti mi pare di ricordare che un array, quando viene ridimensionato, in realtà viene creato come nuovo array. Mi rifaccio il test che avevo ideato prima...
Sub Main()
Dim MyArray As String()
Dim SecondoArray As String()
MyArray = {"uno", "due", "tre"}
SecondoArray = MyArray
Console.WriteLine(MyArray(0))
Console.WriteLine(SecondoArray Is MyArray)
Console.ReadKey()
ReDim Preserve MyArray(3)
MyArray(3) = "quattro"
Console.WriteLine(MyArray(3))
Console.WriteLine(SecondoArray Is MyArray)
Console.ReadKey()
End Sub
Ecco l'output:
uno
True
quattro
False
Questo significa che dopo il ReDim Preserve viene scritto nell'Heap un nuovo array con una locazione diversa.
Ci aggiungo dell'altro codice per vedere invece se la variabile
SecondoArray resta sempre quella di prima.
Sub Main()
Dim MyArray As String()
Dim SecondoArray As String()
MyArray = {"uno", "due", "tre"}
SecondoArray = MyArray
Console.WriteLine(MyArray(0))
Console.WriteLine("la proposizione secondo cui SecondoArray si identifica con MyArray è " & (SecondoArray Is MyArray))
Console.WriteLine("Lunghezza di MyArray " & MyArray.Length)
Console.WriteLine("Lunghezza di SecondoArray " & SecondoArray.Length)
Console.ReadKey()
ReDim Preserve MyArray(3)
MyArray(3) = "quattro"
Console.WriteLine()
Console.WriteLine(MyArray(3))
Console.WriteLine("la proposizione secondo cui SecondoArray si identifica con MyArray è " & (SecondoArray Is MyArray))
Console.WriteLine("Lunghezza di MyArray " & MyArray.Length)
Console.WriteLine("Lunghezza di SecondoArray " & SecondoArray.Length)
Console.ReadKey()
End Sub
Ecco, ci ho aggiunto del codice più "esplicativo", che "parla un po' più chiaro":
uno
la proposizione secondo cui SecondoArray si identifica con MyArray è True
Lunghezza di MyArray 3
Lunghezza di SecondoArray 3
quattro
la proposizione secondo cui SecondoArray si identifica con MyArray è False
Lunghezza di MyArray 4
Lunghezza di SecondoArray 3
Dunque è chiaro che con il ReDim Preserve in realtà
non si ridimensiona un bel niente, ma viene creato un
nuovo array nello Heap, cui "punta" la variabile presente nello stack.