2010-01-11 4 views

Répondre

13

Un List<T> est généralement préférable à l'utilisation d'un ArrayList car il s'agit d'une collection de type sécurisée. Cela signifie que vous obtenez la sécurité du type de temps de construction. Il est également plus efficace de la mémoire pour les types de valeur car les entrées dans un ArrayList seront mis en boîte parce que sa liste d'objets de type:

par exemple: Ajout d'un nombre entier à un List<int> mettra les données sur le tas en utilisant un int[] comme le sous-jacent Structure de données. L'ajout d'un entier à ArrayList placera les données sur le tas, mais comme la structure de données sous-jacente est object[], les données doivent être encadrées, ce qui signifie qu'un pointeur doit également être stocké sur le tas, ce qui nécessite plus de mémoire allouée.

L'allocation de mémoire pour un ArrayList et un List<T> : class (une liste de types de référence) est exactement le même.

+0

@Charlie: L'ajout d'un entier à une liste place les données * sur le tas *, en tant qu'élément du tableau interne de la liste. La différence entre 'List ' et' ArrayList' de 'int' est, comme vous le dites, que les éléments ne seront pas encadrés dans la liste générique. – LukeH

+0

@Luke, merci d'avoir mis à jour. – Charlie

5

List<T> est mieux que ArrayList:

Un tableau d'un type spécifique (autre que l'objet) a de meilleures performances qu'un ArrayList parce que les éléments de ArrayList sont de type objet et, par conséquent, la boxe et unboxing généralement se produire lors du stockage ou de la récupération d'un type de valeur. Cependant, une liste peut avoir des performances similaires à 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.

De ArrayList and List Collection Types