quelle est la différence entre la chaîne de tableau et de liste de chaîne de caractères en c#
Que j'entends sur MSDN qu'un tableau est plus rapide qu'une collection.
Pouvez-vous me dire comment string[]
est plus rapide que d' List<string>.
Vous devez vous connecter pour publier un commentaire.
Les tableaux sont un plus faible niveau d'abstraction de collections tel que des listes. Le CLR sait sur les tableaux directement, donc il y a un peu moins impliqués dans l'itération, l'accès etc.
Toutefois, cela devrait presque jamais dicter qui vous l'utiliser effectivement. La différence de performances est négligeable dans la plupart des applications du monde réel. Je trouve rarement qu'il est approprié d'utiliser des tableaux plutôt que les différents génériques de classes de collection, et en effet, certains considèrent tableaux peu nocif. Un seul inconvénient est qu'il n'y a pas une telle chose comme un immuable array (autre que le vide)... alors que vous pouvez exposer les collections en lecture seule via une API relativement facilement.
L'article est à partir de 2004, ce qui signifie qu'il est à propos de .net 1.1 et il n'y a pas de génériques.
Tableau vs rendement de la collecte était en réalité un problème de dos ensuite, parce que les types de collection causé beaucoup de exta boxe-unboxing opérations. Mais depuis .net 2.0, où les médicaments génériques a été introduit sur la différence de performance presque disparu.
Un tableau n'est pas redimensionnable. Cela signifie que lorsqu'il est créé un bloc de mémoire est allouée, assez grand pour contenir autant d'éléments que vous spécifiez.
Un
List
sur l'autre main est implicitement redimensionnable. Chaque fois que vousAdd
un élément, le cadre peut-être besoin d'allouer plus de mémoire pour contenir l'élément que vous venez d'ajouter. C'est une opération coûteuse, de sorte que nous nous retrouvons en disant: "la Liste est plus lent que le tableau".Bien sûr, c'est un très explication simplifiée, mais j'espère assez pour peindre l'image.
Un tableau est la forme la plus simple de collection, de sorte qu'il est plus rapide que d'autres collections. Une Liste (et de nombreuses autres collections) utilise un tableau à l'interne pour tenir ses éléments.
Un tableau est bien sûr également limitée par sa simplicité. Plus particulièrement, vous ne pouvez pas changer la taille d'un tableau. Si vous souhaitez un regroupement dynamique, vous devez utiliser une Liste.
List<string>
est classe, avec un membre privé qui est unstring[]
. La documentation MSDN membres de ce fait à plusieurs endroits. La Liste de classe est essentiellement une classe wrapper autour d'un tableau qui donne la matrice d'autres fonctionnalités.La réponse de ce qui est plus rapide, tout dépend de ce que vous essayez de faire avec la liste/tableau. Pour l'accès et l'attribution de valeurs aux éléments, le tableau est probablement très rapides, car la Liste est une abstraction de la matrice (comme Jon Skeet a dit).
Si vous avez l'intention d'avoir une structure de données qui se développe au fil du temps (devient de plus en plus d'éléments), la performance (ave. la vitesse) sage la Liste va commencer à briller. C'est parce que chaque fois que vous redimensionner un tableau pour ajouter un autre élément, il est un O(n) opérations. Lorsque vous ajoutez un élément à une Liste (et la liste est déjà à pleine capacité), la liste sera le double de lui-même dans la taille. Je ne rentrerai pas dans les détails concrets, mais, fondamentalement, cela signifie que l'augmentation de la taille de la Liste est en moyenne de un O(log n) opérations. Bien sûr, cela a des inconvénients trop (vous pourriez avoir presque le double de la quantité de mémoire allouée que vous avez vraiment besoin si vous allez seulement quelques éléments du passé de sa dernière capacité).
Edit: je me suis un peu mélangé dans le paragraphe ci-dessus. Comme Eric l'a dit ci-dessous, le nombre de redimensionne pour une Liste est en O(log n), mais le coût réel associé avec le redimensionnement de la matrice amorti O(1).