Respuesta corta
Debido a que la capacidad de ArrayDeque debe ser una potencia de dos, y 16 es la potencia más pequeña de dos que es al menos 10.
ArrayDeque necesita usar muchas operaciones% en todas partes para envolver una matriz lineal que pretende ser circular.
a % b
se puede expresar como a & (b - 1)
si fuera b
una potencia de dos. El AND a nivel de bits es masivamente más rápido, por lo que la capacidad de ArrayDeque se limita a la potencia de dos. Todas las operaciones% se realizan con máscara de bits en lugar de% real en la implementación.
Esta es también la razón por la cual el HashMap más nuevo no usa tamaños de tabla de números primos sino potencia de dos , nuevamente porque el% de operación debe realizarse con tanta frecuencia y a nivel de bits y es mucho más rápido.
Entonces, si la línea de base es 10, entonces las estructuras que tienen una potencia de dos limitaciones deben usar 16 porque es la potencia más pequeña de dos que es al menos 10.