Quelle est la capacité par défaut d'une liste?
Réponses
Trop de publicités?En fait, il commence par une capacité de 0. Lorsque vous ajoutez le premier élément, l'implémentation actuelle alloue une capacité de 4. Après cela, la capacité continue de doubler si une expansion est nécessaire, pour garantir le fonctionnement amorti de O (1).
Gardez à l'esprit qu'il s'agit du comportement actuel. Vous ne devriez pas vous en remettre à cela. Cela devrait démontrer le comportement actuel:
List<int> list = new List<int>();
int capacity = list.Capacity;
Console.WriteLine("Capacity: " + capacity);
for (int i = 0; i < 100000; i++)
{
list.Add(i);
if (list.Capacity > capacity)
{
capacity = list.Capacity;
Console.WriteLine("Capacity: " + capacity);
}
}
Selon l'exemple de la documentation du constructeur sans paramètre MSDN , la capacité initiale d'une liste créée avec:
List<string> x = new List<string>();
est 0. Pour autant que je sache, cela n'est pas documenté comme une garantie, ni la politique de redimensionnement documentée (c'est-à-dire qu'elle peut actuellement doubler avec un minimum de 4, mais dans .NET 5.0, elle pourrait tripler avec un minimum de 128 .) Fondamentalement, vous ne devriez pas vous fier à ce comportement.
Tout cela réside dans une seule ligne pour garantir que la capacité est capable de stocker un autre élément:
int num = this._items.Length == 0 ? 4 : this._items.Length * 2;
J'ai obtenu cela du mscorlib 4.0.0.0 désassemblé - bien sûr, comme Jon l'a dit, cela ne peut être garanti de ne pas changer à l'avenir (jusqu'à présent, il reste à 0, 4, 8, 16 ...).
Bien sûr, vous pouvez le régler vous-même, ce qui peut être 3, 9, 27, etc.