28 votes

tableau c # vs liste générique

Je veux essentiellement connaître les différences ou les avantages de l'utilisation d'une liste générique au lieu d'un tableau dans le scénario mentionné ci-dessous

 class Employee
{
    private string _empName;

    public string EmpName
    {
       get{ return _empName; }
       set{ _empName = value; }
    }
}
 

 1. Employee[] emp 
2. List<Employee> emp
 

quelqu'un peut-il me dire les avantages ou les inconvénients et lequel préférer?

19voto

Thomas Points 42973

Une grande différence est que List<Employee> peut être développé (vous pouvez appeler Add dessus) ou contracté (vous pouvez appeler Remove dessus) alors que Employee [] est de taille fixe. Ainsi, Employee[] est plus difficile à travailler, sauf si le besoin l'exige.

12voto

Justin Grant Points 25644

La plus grande différence est que les tableaux ne peuvent pas être plus longue ou plus courte, une fois qu'ils sont créés. Liste des cas, cependant, peut avoir des éléments ajoutés ou supprimés. Il y a d'autres différences (par exemple les différents ensembles de méthodes disponibles), mais ajouter/supprimer est la grande différence.

J'aime la Liste, sauf si il y a vraiment une bonne raison pour utiliser un Tableau, car la flexibilité de la Liste est agréable et la perf de pénalité est très faible par rapport au coût de la plupart des autres choses que votre code est généralement en train de faire.

Si vous voulez plonger dans un grand nombre de techniques intéressantes détail, découvrez cette StackOverflow thread qui plonge dans la Liste vs Matrice question plus en profondeur.

7voto

Marc Gravell Points 482669

Avec le générique de la liste, vous pouvez l' Add / Remove etc à bon marché (au moins, jusqu'à la fin). Le redimensionnement d'un tableau (ajouter/supprimer) est plus cher. L'inconvénient évident est que une liste a la capacité de réserve, alors peut-être perdre un peu d'octets - pas la peine de s'inquiéter à propos de dans la plupart des cas, bien que (et vous pouvez le découper).

En général, préfèrent les listes, sauf si vous savez que vos données ne soient pas des changements de taille.

API-sage, depuis LINQ il y a peu de choix (c'est à dire les méthodes supplémentaires sur List<T> sont en grande partie reprises par LINQ, de sorte que les tableaux de les obtenir gratuitement).

Un autre avantage est qu'avec une liste, vous n'avez pas besoin d'exposer un setter:

private readonly List<Foo> items = new List<Foo>();
public List<Foo> Items { get { return items; } }

l'élimination de toute une gamme d' null bugs, et vous permettant de garder le contrôle sur les données (en particulier si vous utilisez un autre IList<> mise en œuvre qui prend en charge l'inspection / validation lors de la modification du contenu).

2voto

Pratik Deoghare Points 9766

Vous avez besoin de connaître la taille d'un tableau à l'heure qu'il est créé, mais vous ne pouvez pas modifier sa taille après qu'il a été créé.

Donc, il utilise l'allocation dynamique de la mémoire pour le tableau au moment de la création. (Ceci diffère de la statique de l'allocation de la mémoire utilisée pour le C++ tableaux, dont la taille doit être connue au moment de la compilation.)

Une liste peut se développer de manière dynamique APRÈS qu'il a été créé, et il a l' .Add() de la fonction pour le faire.

-à partir de MSDN

  1. Les génériques Vs Tableau liste-de manière Générale comparaison.
  2. Liste générique vs Tableaux-ALORS, Pourquoi est générique liste plus lent que le tableau?

Lequel préférez? List<T>.

2voto

Mitch Wheat Points 169614

Si vous exposez une collection dans une interface publique, les directives du .NET Framework recommandent d'utiliser une liste plutôt que T []. (En fait, une BindingList <T>)

En interne, un tableau peut être plus approprié si vous avez une collection dont la taille est connue et fixe. Le redimensionnement d'un tableau est coûteux par rapport à l'ajout d'un élément à la fin d'une liste.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X