Pourquoi est la valeur par défaut de la capacité de liste de tableaux 10?
J'ai vu la java doc pour ArrayList et a constaté que la capacité initiale de ArrayList est de 10.
/**
* Constructs an empty list with an initial capacity of ten.
*/
public ArrayList() {
this(10);
}
Je pense qu'il ferait de sens si elle était toute puissance de 2, mais pourquoi 10?
J'ai aussi vérifié HashMap de la capacité initiale, et il est 16 qui a du sens.
/**
* The default initial capacity - MUST be a power of two.
*/
static final int DEFAULT_INITIAL_CAPACITY = 16;
/**
* Constructs an empty <tt>HashMap</tt> with the default initial capacity
* (16) and the default load factor (0.75).
*/
public HashMap() {
this.loadFactor = DEFAULT_LOAD_FACTOR;
threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR);
table = new Entry[DEFAULT_INITIAL_CAPACITY];
init();
}
Est-il préciser la raison derrière le numéro 10?
- >>> il peut faire sens que si elle pourrait être n'importe quel nombre de puissance de 2, pourquoi?
- Je pense qu'il va revenir à la forme de vie dominante dans les cs qui semblent avoir deux manipulateurs avec 5 chiffres sur chaque. Ceux utilisés pour le comptage dans les premiers jours de l'informatique. Par conséquent, ils préfèrent les puissances de 10 pour toutes sortes de choses.
- 10 est la capacité initiale de la Liste de Tableau pas de la taille.La taille initiale est toujours 0.
- oui, vous l'écrivez. Mon erreur.Sa capacité n'est pas la taille. J'ai modifié la question. 🙂
- Je pensais que tout nombre qui est de la puissance, de 2 ce serait mieux que n'importe quel nombre aléatoire. Je n'ai pas d'idée précise de la façon dont ses plus approprié que n'importe quel autre numéro.J'ai pensé il y a peut être une raison spécifique, mais peut-être 10 est juste un pas trop grand , pas trop petit nombre, à utiliser pour la capacité initiale.
- Après Java 1.7.0_40 mise à jour, liste de tableaux capacité initiale est de 0 (points de tableau vide)
Vous devez vous connecter pour publier un commentaire.
La
ArrayList
est simple éventail croissant. Lorsque vous essayez d'ajouter un élément, et la taille de la mémoire tampon est dépassé, il est tout simplement grandir. Si la taille initiale peut être n'importe quelle valeur positive.Le 1 serait trop peu. Même avec quelques éléments nous aurons quelques opérations de redimensionnement.
100 serait une perte d'espace.
Donc, le 10 est compromis. Pourquoi 10 et 12 ou 8? Premier indice, le cas d'utilisation typique ont été analysés, et c'est le meilleur ajustement entre la perte de performance et de perdu de l'espace. Cependant, je pense, de voir le Soleil du code d'origine, qu'il n'était pas analysé si profondément et c'est un arbitraire "pas trop petit, pas trop grand' nombre.
Pour une Liste, il n'y a aucun avantage à avoir la capacité d'être une puissance de deux. En fait, il n'y a pas de réel avantage spécifique de capacité de démarrage. Il doit être suffisamment grand pour éviter de multiples redimensionnement des mesures pour le cas des petites listes, et assez petit de ne pas gaspiller de la mémoire sur la capacité inutilisée dans le même cas. 10 a probablement été choisi tout simplement parce qu'il tombe dans la bonne gamme pour répondre à ces exigences, et parce que c'est "ronde".
ArrayList
s sera redimensionnée en place assez rapidement; vous soucier des détails comme la capacité exacte est juste surpuissant.Vector
, à partir du JDK 1.0 a, par défaut, une capacité initiale de 10, de sorte qu'il a probablement fait un certain sens, pour rester cohérent quand ils ont introduitArrayList
1.2.Choix complètement arbitraire.
Et il n'ya aucune raison pourquoi une puissance de 2 fait plus de sens ici. Il de sens que dans une table de hachage, en raison de la façon dont les œuvres de hachage. En fait, il doit être une puissance de deux (selon le commentaire dans le source).
Noter que java.util.Vecteur (qui est le frère aîné de ArrayList) a également 10.
10 est probablement plus ou moins nombre arbitraire de la valeur par défaut nombre d'éléments.
Sauf si il y a un commentaire dans le code, nous ne le saurons jamais sûr. Cependant, j'imagine qu'à un certain point un Soleil ingénieur a recueilli des statistiques sur l'utilisation de la liste de tableaux sur un grand nombre d'applications du monde réel, et déterminé ... empiriquement ... 10 a donné à peu près les meilleurs résultats en moyenne. (C'est la mélodie des choses comme cela, l'optimiseur, le bytecode de la conception et ainsi de suite.)
Et, et d'autres ont souligné, il n'y a pas de calcul de l'avantage (ou le désavantage) en utilisant une taille qui est une puissance de deux pour la taille d'un
ArrayList
.ArrayList est juste un Tableau qui peut pousser automatiquement..
et je pense qu'il n'y a pas beaucoup de réflexion derrière cette première/valeur par défaut.La valeur par défaut de 10 semble juste de ne pas loo grand et pas trop petit.(Peut-être cela pourrait être une raison).
Que faire si vous dépassez la valeur par défaut initiale de la capacité de la pile..?
La prochaine capacité de la pile est calculée par