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 消耗(太小的数字需要太多调整大小)之间的权衡队列)。他们可能对典型用例进行了基准测试,以选择这个数字和用于调整队列大小的策略。

关于java - java中优先级队列的默认大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10861101/

相关文章:

java - 是否有 PHP 函数 "hash"的 Java 等价物?

queue - 在 O(1) 时间内支持最小、最大操作的队列的正确数据结构是什么?

python - 我在 Python 中使用什么来实现最大堆?

F# 优先级队列

Java数组转多维

java - 异常后继续 SuperCSV 读取

java - Log4j/Slf4j 记录到 BigQuery

python - 如何在python中获取最大堆

python - 从python中的 'heapq'和 'deque'继承?

data-structures - 支持 LIFO 压入和弹出的优先级队列?