Estaba viendo el origen de Java.Util.ArrayDeque de Java 1.6 (una implementación de cola) y tropecé con allocateElements() que debería dimensionar la matriz de respaldo de acuerdo con el número dado de elementos:Implementación de ArrayDeque.allocateElements (operaciones bit a bit)
private void allocateElements(int numElements) {
int initialCapacity = MIN_INITIAL_CAPACITY;
// Find the best power of two to hold elements.
// Tests "<=" because arrays aren't kept full.
if (numElements >= initialCapacity) {
initialCapacity = numElements;
initialCapacity |= (initialCapacity >>> 1);
initialCapacity |= (initialCapacity >>> 2);
initialCapacity |= (initialCapacity >>> 4);
initialCapacity |= (initialCapacity >>> 8);
initialCapacity |= (initialCapacity >>> 16);
initialCapacity++;
if (initialCapacity < 0) // Too many elements, must back off
initialCapacity >>>= 1;// Good luck allocating 2^30 elements
}
elements = (E[]) new Object[initialCapacity];
}
¿Cuál es el propósito de ORing initialCapacity con rhifted?
Ya consiguió amar Bloch y Lea de comentarios :-) – trashgod
¡Gracias por la respuesta detallada! ¡Qué lástima que no sepa cómo encontrar la potencia de dos más cercana con operaciones bit a bit! –
De nada. Es uno de mis [* Bit Twiddling Hacks *] favoritos (https://graphics.stanford.edu/~seander/bithacks.html). – trashgod