web-dev-qa-db-fra.com

Différences significatives entre Array et Array List?

Duplicata possible:
Quand utiliser ArrayList sur un tableau [] en c #?

Du point de vue des coûts de mémoire ou de processeur, semble-t-il y avoir une différence significative entre un tableau et un objet arrayList?

16
Mike Olson

Un tableau est une structure de données de bas niveau qui correspond essentiellement à une région en mémoire. Un ArrayList est une liste de longueur variable implémentée comme un tableau de object qui est réallouée au fur et à mesure que la liste grandit.

ArrayList a donc une surcharge liée à la gestion de la taille du tableau interne, et plus de surcharge liée à la conversion d'objets au type correct lorsque vous accédez à la liste.

De plus, tout stocker en tant que object signifie que les types de valeurs sont encadrés en écriture et non encadrés en lecture, ce qui est extrêmement préjudiciable aux performances. En utilisant List<T>, une liste de taille variable similaire mais fortement typée évite ce problème.

En fait, ArrayList est pratiquement obsolète au profit de List<T> depuis .NET 2.0.

6
Asik

Un tableau est un bloc de mémoire contigu de taille fixe, tandis qu'un ArrayList (bien que vous préfériez List depuis .NET 2.0) encapsule un tableau pour fournir un stockage redimensionnable dynamiquement.

La "différence" entre eux est que, dans la mesure où ils sont encapsulés, une ArrayList est redimensionnable, un tableau ne l'est pas. En ce qui concerne l'implémentation: parce qu'un ArrayList encapsule (et réalloue) des tableaux, il nécessitera plus légèrement plus de mémoire qu'un tableau (car il doit connaître le nombre actuel d'éléments, par opposition à sa capacité), en plus un ArrayList également nécessite du temps CPU pour réallouer et copier sa baie interne si jamais elle atteint sa capacité interne.

Cependant, l'instanciation d'un ArrayList n'est pas plus coûteuse que l'allocation d'un tableau. La seule différence étant la poignée d'instructions nécessaires pour initialiser l'état de ArrayList. La différence est négligeable et ne vaut pas la peine de s'inquiéter.

Vous constaterez que si vous réaffectez un tableau par vous-même comme moyen de créer une collection redimensionnable, vous feriez mieux d'utiliser ArrayList/List car il a été soigneusement testé.

1
Dai