Condividi tramite


Tipi di insieme ArrayList e List

Gli oggetti System.Collections.ArrayList e System.Collections.Generic.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. Ad 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à ArrayList.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.

  • È possibile creare in modo semplice una versione sincronizzata di ArrayList utilizzando il metodo Synchronized, tuttavia questo tipo di sincronizzazione è piuttosto inefficiente. Per le classi Array e List<T>, è l'utente che decide se implementare la sincronizzazione. Lo spazio dei nomi System.Collections.Concurrent non fornisce un tipo di elenco simultaneo, ma fornisce un tipo ConcurrentQueue<T> e ConcurrentStack<T>.

  • ArrayList e List<T> forniscono metodi che restituiscono all'insieme wrapper di sola lettura e di dimensioni fisse. Array non si comporta in questo modo.

Array offre invece una flessibilità che non è disponibile per ArrayList e List<T>. Ad esempio:

  • Il limite inferiore di una classe Array può essere impostato, mentre quello di una classe ArrayList o List<T> è sempre pari a zero.

  • Un oggetto Array può avere più dimensioni, mentre un oggetto ArrayList o List<T> ha sempre esattamente una dimensione. È tuttavia possibile creare in modo semplice un elenco di matrici o un elenco di elenchi.

  • Un oggetto Array di un tipo specifico (diverso da Object) offre prestazioni migliori rispetto a ArrayList. Questo avviene in quanto gli elementi di ArrayList sono di tipo Object e pertanto le conversioni boxing e unboxing vengono in genere eseguite quando si archivia o si recupera un tipo di valore. Un oggetto List<T> può tuttavia offrire prestazioni simili a quelle di una matrice dello stesso tipo se non è necessario eseguire operazioni di riallocazione, ovvero se la capacità iniziale corrisponde 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.

Vedere anche

Riferimenti

ArrayList

System.Collections

List<T>

System.Collections.Generic

Array

System.Collections.Concurrent

Concetti

Tipi di insieme comunemente utilizzati