Реализация ArrayDeque.allocateElements (побитовые операции)

Я смотрел на источник Java 1.6 Java.Util.ArrayDeque (реализация очереди) и наткнулся на allocateElements (), которая должна определять размер резервного массива в соответствии с заданным числом элементов:

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];
}

Какова цель ORing initialCapacity с самим rshifted?

5
задан Francesco De Vittori 3 April 2011 в 07:23
поделиться