Dans mon esprit, List
est fondamentalement mis en œuvre en utilisant LinkedList
, tandis qu'un Array
normal est implémenté comme des blocs contigus. J'ai toujours utilisé List
car il se trouve dans l'espace de noms Generic
et parce que je pensais qu'il utilisait allocation de mémoire dynamique - mais j'avais tort.Pourquoi SortedList et List utilisent array et pourquoi LinkedList n'est pas beaucoup utilisé?
Hier, j'ai vu l'implémentation de List
en utilisant Reflector et j'ai trouvé qu'il s'agit en réalité d'un tableau de T (T[]
). Il y a beaucoup de Array.Copy
autour tout en manipulant chaque élément dans le List
. Par exemple, lorsque vous utilisez Insert
, il va créer une nouvelle mémoire et copier tous les éléments avant/après les éléments insérés. Donc, il me semble que l'utilisation de List
est très chère. J'ai aussi vu le SortedList
. Je ne suis pas sûr pourquoi un SortedList
implémente également un tableau à l'intérieur. Ne pensez-vous pas SortedList
serait horrible d'utiliser un tableau que vous avez besoin de trier la liste chaque fois qu'une manipulation mineure à la List
se produit?
Je me demande également pourquoi List
est si populaire que la plupart des gens l'utilisent plutôt que d'aller LinkedList
. Est-ce seulement à cause de la flexibilité de l'indexeur?
Regardez de plus près: Liste <> ne * crée * pas un nouveau tableau et copie tous les éléments sur * chaque * appel. Le tableau est seulement redimensionné quand il est plein, et il est redimensionné à deux fois sa taille d'origine. Le redimensionnement ne se produit qu'à intervalles exponentiellement croissants lors de l'ajout continu d'éléments. – dtb
Il n'y a pas de réponse correcte à cette question. Pensez à soit être plus spécifique ou marquer comme wiki –
@dtb oui il utilise this._items [this._size ++] = item; Oui, il augmente exponentiellement les intervalles, mais comment s'assure-t-il toujours que la taille ++ a un espace vide? – abhishek