ArrayList vs List

J’ai vu cette réponse de Jon sur Initialize object générique de type inconnu :

Si vous souhaitez qu’une seule collection contienne plusieurs types de valeurs sans rapport, vous devrez cependant utiliser List

Je ne compare pas ArrayList vs List , mais ArrayList vs List , car les deux exposeront des éléments de type object . Quel serait l’intérêt d’utiliser l’un ou l’autre dans ce cas?

EDIT: Il n’y a aucun souci pour la sécurité de type ici, puisque les deux classes exposent l’ object comme object. Il faut encore lancer de l’ object au type souhaité. Je suis plus intéressé par autre chose que la sécurité de type.

EDIT: Merci Marc Gravell et Sean pour la réponse. Désolé, je ne peux que choisir 1 comme réponse, alors je vais voter les deux.

Vous pourrez utiliser les méthodes d’extension LINQ directement avec List , mais pas avec ArrayList , sauf si vous injectez un Cast() / OfType (grâce à IEnumerable vs IEnumerable ). Cela vaut beaucoup, même si vous n’avez pas besoin de sécurité de type, etc.

La vitesse sera à peu près la même; les structures seront toujours encaissées, etc. – il n’y a donc pas grand chose d’autre à distinguer. Sauf que j’ai tendance à voir ArrayList comme “oops, quelqu’un écrit à nouveau du code hérité …” ;-p

Un grand avantage à utiliser List est que ces jours-ci, la plupart du code est écrit pour utiliser les classes / interfaces génériques. Je pense que de nos jours, la plupart des gens écriraient une méthode qui prend un IList IList au lieu d’un IList . ArrayList pas IList vous ne seriez pas en mesure d’utiliser une liste de tableaux dans ces scénarios.

J’ai tendance à considérer les classes / interfaces non génériques comme un code hérité et à les éviter autant que possible.

Dans ce cas, ArrayList vs. List vous ne remarquerez aucune différence de vitesse. Il pourrait y avoir des différences dans les méthodes réelles disponibles sur chacun d’eux, en particulier dans les méthodes d’extension .NET 3.5 et de comptage, mais cela est davantage dû au fait que ArrayList est quelque peu obsolète.

Oui, en plus d’être typesafe, les collections génériques pourraient être plus rapides.

Depuis MSDN ( http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx )

L’espace de noms System.Collections.Generic contient des interfaces et des classes qui définissent des collections génériques, ce qui permet aux utilisateurs de créer des collections fortement typées qui offrent un niveau de sécurité et de performances supérieur à celui des collections fortement génériques non génériques.

Faites des parsings comparatives et vous saurez ce qui fonctionne le mieux. Je pense que la différence est très faible.

List <> est une version de type ArrayListe. Cela garantira que vous obtiendrez le même type d’objet dans la collection.