Partager via


Types de collections ArrayList et List

Un objet System.Collections.ArrayList ou System.Collections.Generic.List<T> est une version élaborée d'un tableau. La classe ArrayList et la classe générique List<T> fournissent certaines fonctionnalités que l'on retrouve dans la plupart des classes System.Collections, mais pas dans la classe Array. Par exemple :

  • La capacité d'un Array est fixe, tandis que la capacité d'un ArrayList ou d'un List<T> s'adapte automatiquement aux besoins. Si la valeur de la propriété ArrayList.Capacity est modifiée, la réallocation de mémoire et la copie des éléments sont exécutées automatiquement.

  • ArrayList et List<T> fournissent des méthodes pour ajouter, insérer ou supprimer une plage d'éléments. Dans Array, vous pouvez obtenir ou définir la valeur d'un seul élément à la fois.

  • La méthode Synchronized permet de créer facilement une version synchronisée de ArrayList ; toutefois, ce type de synchronisation est plutôt inefficace. Les classes Array et List<T> laissent à l'utilisateur le soin d'implémenter la synchronisation. L'espace de noms System.Collections.Concurrent ne fournit pas de type de liste simultané, mais fournit un type ConcurrentQueue<T> et ConcurrentStack<T>.

  • ArrayList et List<T> fournissent des méthodes qui retournent à la collection des wrappers en lecture seule et de taille fixe. Ce n'est pas le cas de Array.

Par ailleurs, Array offre une certaine flexibilité, ce qui n'est pas le cas de ArrayList et List<T>. Par exemple :

  • Vous pouvez définir la limite inférieure d'un Array, alors que celle d'un ArrayList ou d'un List<T> est toujours égale à zéro.

  • Un Array peut avoir plusieurs dimensions, mais un ArrayList ou un List<T> est toujours limité à une seule dimension. Toutefois, vous pouvez facilement créer une liste de tableaux ou une liste de listes.

  • Un Array d'un type spécifique (autre que Object) offre de meilleures performances qu'un ArrayList. Cela est dû au fait que les éléments de ArrayList sont de type Object ; par conséquent, le boxing et l'unboxing se produisent généralement lors du stockage ou de la récupération d'un type valeur. Toutefois, un List<T> peut offrir des performances semblables à celles d'un tableau du même type si aucune réallocation n'est requise, c'est-à-dire si la capacité initiale est une bonne approximation de la taille maximale de la liste.

Dans la plupart des situations qui appellent un tableau, il est possible d'utiliser à la place un ArrayList ou un List<T> ; ceux-ci sont plus faciles à utiliser et ont, en règle générale, des performances semblables à celles d'un tableau du même type.

Array se trouve dans l'espace de noms System ; ArrayList se trouve dans l'espace de noms System.Collections ; List<T> se trouve dans l'espace de noms System.Collections.Generic.

Voir aussi

Référence

ArrayList

System.Collections

List<T>

System.Collections.Generic

Array

System.Collections.Concurrent

Autres ressources

Types de collections couramment utilisés