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

原文 标签 java heap priority-queue language-implementation

我想知道为什么PriorityQueue in Java的默认大小是11。我抬起了implementation,这对我来说使事情变得更加混乱。

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

/**
 * 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消耗(太小的数字将需要太多的队列调整)之间的折衷)。他们可能会比较典型的用例,以选择此数字以及用于调整队列大小的策略。

相关文章:

c++ - 层次优先级索引

java - 在Java中将键和值添加到优先级队列并按键排序

java - 使用下载管理器从AsyncTask下载文件

c - 删除二进制堆中最顶层的元素

java - 使用SwingWorker在GUI中添加进度条

c++ - 堆数据困惑

c - realloc()浪费了很多空间,我做错了什么?

c - C中的优先级队列实现-将字符更改为整数

java - 图片未正确显示在帧布局中

java - 在依赖jar的 Ant 中运行目标