Partager via


Définition de collections

Une collection est un ensemble d'objets du même type qui sont regroupés ensemble.

Les objets d'un type quelconque peuvent être regroupés en une collection du type Object afin de tirer parti des constructions inhérentes au langage. Par exemple, l'instruction C# foreach (for each en Visual Basic) s'attend à ce que tous les objets de la collection soient du même type.

Cependant, dans une collection de type Object, les différents éléments sont soumis à un traitement supplémentaire, des opérations de boxing / unboxing ou des conversions par exemple, qui pénalise les performances de la collection. Le boxing et l'unboxing ont généralement lieu en cas de stockage ou d'extraction d'un type valeur dans une collection de type Object.

Les collections génériques, telles que List<T>, et les collections non génériques fortement typées, telles que StringCollection, évitent cette dégradation des performances si le type de l'élément est le type auquel la collection est destinée (par exemple, le stockage ou l'extraction de chaînes à partir de StringCollection). En outre, les collections fortement typées exécutent automatiquement la validation du type de chaque élément ajouté à la collection. Pour ces raisons, nous vous conseillons vivement d'utiliser des classes de collection génériques chaque fois que possible.

Toutes les collections qui implémentent directement ou indirectement l'interface ICollection ou l'interface générique ICollection<T> partagent plusieurs fonctionnalités en plus des méthodes permettant d'ajouter, de supprimer ou de rechercher des éléments :

  • Un énumérateur.

    Un énumérateur est un objet qui itère au sein de la collection qui lui est associée. Il peut être considéré comme un pointeur mobile vers un élément quelconque de la collection. Un énumérateur ne peut être associé qu'à une seule collection, mais une collection peut avoir plusieurs énumérateurs. L'instruction C# foreach (for each en Visual Basic) utilise l'énumérateur et masque la complexité de manipulation de celui-ci.

  • Membres de la synchronisation (classes System.Collections uniquement).

    Sur les types de collection hérités de l'espace de noms System.Collections, la synchronisation fournit un certain niveau de sécurité des threads lors de l'accès aux éléments de la collection. Par défaut, les collections ne sont pas thread-safe. Si vous avez besoin d'un accès multithread évolutif et efficace à une collection, utilisez l'une des classes de l'espace de noms System.Collections.Concurrent. Pour plus d'informations, consultez Collections thread-safe.

    Seules quelques classes de l'espace de noms System.Collections fournissent une méthode Synchronize qui crée un wrapper thread-safe par-dessus la collection. Cependant, toutes les classes de l'espace de noms System.Collections fournissent une propriété SyncRoot que des classes dérivées peuvent utiliser pour créer leur propre wrapper thread-safe. Une propriété IsSynchronized est également fournie pour déterminer si la collection est thread-safe. La synchronisation n'est pas disponible dans l'interface générique ICollection<T>.

  • Méthode CopyTo**.**

    Toutes les collections peuvent être copiées dans un tableau à l'aide de la méthode CopyTo ; toutefois, l'ordre des éléments dans le nouveau tableau dépend de la séquence dans laquelle l'énumérateur les retourne. Le tableau résultant est toujours unidimensionnel avec une limite inférieure de zéro.

Notez que l'interface générique ICollection<T> possède des membres supplémentaires que l'interface non générique n'inclut pas.

Les fonctionnalités suivantes sont implémentées dans certaines classes de l'espace de noms System.Collections :

  • Capacité et décompte.

    La capacité d'une collection est le nombre d'éléments qu'elle peut contenir. Le décompte d'une collection est le nombre d'éléments qu'elle contient réellement. BitArray est un cas spécial ; sa capacité équivaut à sa longueur, qui est la même que son décompte. Certaines collections masquent la capacité ou le décompte, ou les deux.

    Toutes les collections étendent automatiquement leur capacité lorsque la capacité actuelle est atteinte. La mémoire est réallouée et les éléments sont copiés de l'ancienne collection vers la nouvelle. Le code nécessaire pour utiliser la collection est ainsi réduit, mais les performances de la collection peuvent quand même s'en ressentir. La meilleure façon d'éviter la dégradation des performances due à des réallocations multiples est de définir une capacité initiale égale à la taille estimée de la collection.

  • Limite inférieure.

    La limite inférieure d'une collection est l'index de son premier élément. Toutes les collections indexées des espaces de noms System.Collections ont une limite inférieure de zéro. Array a une limite inférieure de zéro par défaut, mais une limite inférieure différente peut être définie lors de la création d'une instance de la classe Array à l'aide de CreateInstance.

Les classes System.Collections sont généralement réparties en trois catégories :

  • Collections fréquemment utilisées.

    Il s'agit des variations communes des collections de données, telles que les tables de hachage, les files d'attente, les piles, les dictionnaires et les listes. De nombreuses collections fréquemment utilisées possèdent des versions non génériques, des versions génériques et des versions génériques thread-safe.

  • Collections binaires.

    Il s'agit de collections dont les éléments sont des bits indicateurs. Leur comportement est un peu différent de celui des autres collections.

  • Collections spécialisées.

    Ces collections répondent à des objectifs hautement spécifiques ; il s'agit généralement de gérer un élément de type spécifique, tel que StringDictionary.

Veillez à choisir votre classe de collection avec beaucoup de soin. Si chaque collection a sa propre fonctionnalité, elle a également ses propres limites. Plus une collection est spécialisée, plus elle est limitée. Pour des conseils sur le choix d'une collection, consultez Sélection d'une classe de collection.

Voir aussi

Référence

System.Collections

System.Collections.Specialized

System.Collections.Generic

System.Collections.Concurrent

Concepts

Sélection d'une classe de collection

Autres ressources

Collections et structures de données