java中优先级队列的默认大小

java中优先级队列的默认大小,java,heap,priority-queue,language-implementation,Java,Heap,Priority Queue,Language Implementation,我想知道为什么a的默认大小是11。我查了一下,这让我更加困惑 优先级队列作为堆实现。使用此功能调整其容量: /** * Increases the capacity of the array. * * @param minCapacity the desired minimum capacity */ private void grow(int minCapacity) { if (minCapacity < 0) // overflow throw new

我想知道为什么a的默认大小是
11
。我查了一下,这让我更加困惑

优先级队列作为堆实现。使用此功能调整其容量:

/**
 * Increases the capacity of the array.
 *
 * @param minCapacity the desired minimum capacity
 */
private void grow(int minCapacity) {
    if (minCapacity < 0) // overflow
        throw new OutOfMemoryError();
    int oldCapacity = queue.length;
    // Double size if small; else grow by 50%
    int newCapacity = ((oldCapacity < 64)?
                       ((oldCapacity + 1) * 2):
                       ((oldCapacity / 2) * 3));
    if (newCapacity < 0) // overflow
        newCapacity = Integer.MAX_VALUE;
    if (newCapacity < minCapacity)
        newCapacity = minCapacity;
    queue = Arrays.copyOf(queue, newCapacity);
}
/**
*增加阵列的容量。
*
*@param minCapacity所需的最小容量
*/
私人空间增长(单位容量){
if(最小容量<0)//溢出
抛出新的OutOfMemoryError();
int oldCapacity=queue.length;
//如果规模较小,则增加一倍;否则增长50%
int newCapacity=((旧容量<64)?
((旧容量+1)*2):
((旧容量/2)*3));
if(newCapacity<0)//溢出
newCapacity=Integer.MAX_值;
if(新容量<最小容量)
新容量=最小容量;
queue=Arrays.copyOf(queue,newCapacity);
}

我不明白容量的初始值
11
。我认为容量应始终为
2
到级别数。有什么需要澄清的吗?

11可能是一个或多或少任意选择的数字,作为内存消耗(太大的数字将消耗太多的内存而一无所获)和CPU消耗(太小的数字将需要太多的队列大小调整)之间的权衡。他们可能会对典型用例进行基准测试,以选择这个数字和调整队列大小的策略。

11可能是优先级队列比顺序数据结构具有任何优势的最小大小。如果堆的大小是11,那么我们需要4次后续插入/删除来更改堆中的级别数。因此,在[8,15]之间,11是这方面的最佳选择。然而,这种思路并不适用于其他价值观。