Tipi di insieme ArrayList e List
Aggiornamento: novembre 2007
Gli oggetti ArrayList e List<T> costituiscono una versione avanzata di una matrice. La classe ArrayList e la classe generica List<T> forniscono alcune funzionalità che sono disponibili nella maggior parte delle classi di System.Collections, ma che non sono presenti nella classe Array. Esempio:
La capacità di una classe Array è fissa, mentre la capacità di una classe ArrayList o List<T> viene estesa automaticamente in base alle esigenze. In caso di modifica del valore della proprietà Capacity, vengono eseguite automaticamente la riallocazione della memoria e la copia degli elementi.
Le classi ArrayList e List<T> forniscono metodi per l'aggiunta, l'inserimento o la rimozione di un intervallo di elementi. In Array è possibile ottenere o impostare il valore di un solo elemento alla volta.
Una versione sincronizzata di ArrayList è facile da creare tramite il metodo Synchronized. Per la classe Array, è l'utente che decide se implementare la sincronizzazione.
Le classi ArrayList e List<T> forniscono metodi per la restituzione di wrapper di sola lettura e di dimensioni fisse all'insieme. Questi metodi non sono disponibili per Array.
Array offre invece una flessibilità che non è disponibile per ArrayList e List<T>. Esempio:
Il limite inferiore di una classe Array può essere impostato, mentre quello di una classe ArrayList o List<T> è sempre pari a zero.
Una classe Array può avere più dimensioni, mentre una classe ArrayList o List<T> ha sempre una dimensione specifica.
Le prestazioni di una classe Array di un tipo specifico (diverso da Object) sono superiori a quelle di una classe ArrayList. Gli elementi di ArrayList sono infatti di tipo Object e pertanto si verificano in genere conversioni boxing e unboxing durante l'archiviazione o il recupero di un tipo di valore. Tuttavia, List<T> può avere prestazioni simili a quelle di una matrice dello stesso tipo, purché non sia necessario eseguire operazioni di riallocazione, ossia nel caso in cui la capacità iniziale corrisponda approssimativamente alla dimensione massima dell'elenco.
Nella maggior parte delle situazioni in cui è coinvolta una matrice è possibile utilizzare in alternativa una classe ArrayList o List<T>. Queste classi sono più facili da utilizzare e offrono in generale prestazioni simili a quelle di una matrice dello stesso tipo.
Array appartiene allo spazio dei nomi System, ArrayList allo spazio dei nomi System.Collections e List<T> allo spazio dei nomi System.Collections.Generic.