System.Collections: ArrayList

Implementa l’interfaccia IList, usa un array che dinamicamente aumenta la sua dimensione se richiesto.

Implementazioni:

IList

Osservazioni:

Non è garantito che gli elementi nell’ArrayList siano ordinati.
La capacità dell’ArrayList è in numero degli elementi che può tenere in memoria.
Se il numero di elementi aumenta, anche la dimensione dell’ArrayList aumenterà.
Se il numero degli elementi diminuisce, per ridimensionare l’ArrayList bisognerà chiamare il metodo TrimToSize o settando
la proprietà Capacity.

Possiamo accedere agli elementi dell’ArrayList tramite un’indice. L’indice parte da 0.

L’ArrayList accetta elementi null e due elementi possono essere uguali.

Thread Safety:

I members public static sono thread safe.
Per garantire le operazioni multi-thread, bisogna istanziare un array tramite il metodo ArrayList.Synchronized

Code Snippet
  1.             // Creates and initializes a new ArrayList.
  2.             ArrayList myAL = new ArrayList();
  3.             myAL.Add("The");
  4.             myAL.Add("quick");
  5.             myAL.Add("brown");
  6.             myAL.Add("fox");
  7.             // Creates a synchronized wrapper around the ArrayList.
  8.             ArrayList mySyncdAL = ArrayList.Synchronized(myAL);
  9.             // Displays the sychronization status of both ArrayLists.
  10.             Console.WriteLine("myAL is {0}.", myAL.IsSynchronized ? "synchronized" : "not synchronized");
  11.             Console.WriteLine("mySyncdAL is {0}.", mySyncdAL.IsSynchronized ? "synchronized" : "not synchronized");

 

Durante l’enumerazione degli oggetti nella collection potremmo comunque incappare in un’eccezzione se altri thread modificano la collezione anche se questa è sincronizzata.
Per garantire anche l’accesso durante l’enumerazione bisogna lockare la collection durante l’operazione o catchare l’eccezione per notificare il cambio anche agli altri threads.