Risposta breve
Perché la capacità ArrayDeque deve essere una potenza di due, e 16 è la potenza minima di due che è almeno di 10.
ArrayDeque ha bisogno di usare un sacco di% di operazioni ovunque per avvolgere un array lineare che finge di essere circolare.
a % b
può essere espresso come a & (b - 1)
se b
è una potenza di due. L'AND bit a bit è molto più veloce in modo che la capacità di ArrayDeque sia limitata alla potenza di due. Tutte le operazioni della% vengono eseguite con la bitmap anziché la% effettiva dell'implementazione.
Questo è anche perché la nuova HashMap non usa le dimensioni delle tabelle dei numeri primi ma la potenza di due , di nuovo perché l'operazione% deve essere eseguita così spesso e il bit per bit è molto più veloce.
Quindi se la linea di base è 10, allora le strutture che hanno potere di due limitazioni dovrebbero usare 16 perché è la più piccola potenza di due che sia almeno 10.