En regardant différents constructeurs de collections, la question vient à l'esprit. Pourquoi ArrayList () construit-il une liste vide avec une capacité initiale de dix et ArrayDeque () construit un tableau vide deque avec une capacité initiale suffisante pour contenir 16 éléments.
java
collections
Old Badman Grey
la source
la source
Réponses:
Réponse courte
Parce que la capacité d'ArrayDeque doit être une puissance de deux, et 16 est la plus petite puissance de deux qui est d'au moins 10.
ArrayDeque doit utiliser un grand nombre d'opérations% partout pour boucler autour d'un tableau linéaire qui prétend être circulaire.
a % b
peut être exprimé commea & (b - 1)
sib
est une puissance de deux. L'ET au niveau du bit est massivement plus rapide, la capacité d'ArrayDeque est donc limitée à deux. Toutes les opérations% sont effectuées avec du masquage de bits au lieu du% réel dans l'implémentation.C'est également la raison pour laquelle le nouveau HashMap n'utilise pas des tailles de table de nombres premiers mais une puissance de deux , encore une fois parce que l'opération% doit être effectuée si souvent et au niveau du bit et est beaucoup plus rapide.
Donc, si la ligne de base est 10, les structures qui ont une puissance de deux limitations devraient utiliser 16, car c'est la plus petite puissance de deux qui est d'au moins 10.
la source
N'excluez pas la possibilité qu'il n'y ait pas de raison spécifique.
Il se pourrait que ces deux collections aient été écrites par des équipes différentes. Les deux ont choisi un petit nombre comme capacité par défaut, mais la première équipe a pensé décimalement et a choisi 10, tandis que la deuxième équipe a pensé binaire et a choisi 16.
la source
@ La réponse d'Esailija est bonne pour ce cas spécifique.
Plus généralement cependant, c'est un compromis qui dépend de nombreux facteurs. Je donnerai quelques exemples:
À la suite de ces compromis, il est tout à fait compréhensible que différentes implémentations de collecte puissent avoir une capacité par défaut optimale différente.
la source