我想知道为什么Java中PriorityQueue的默认大小是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);
}
我不明白容量的初始值11
。我认为容量应始终与级别数2
。有什么澄清吗?
11 可能是一个或多或少任意选择的数字,作为内存消耗(太大的数字会白白消耗太多内存)和 CPU 消耗(太小的数字需要太多的队列大小调整)之间的权衡。他们可能会对典型用例进行基准测试,以选择这个数字和用于调整队列大小的策略。