3

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ます。何か説明はありますか?

4

1 に答える 1

3

11は、メモリ消費量(数値が大きすぎるとメモリを消費しすぎて無駄になる)とCPU消費量(数値が小さすぎるとキューのサイズ変更が多すぎる)の間のトレードオフとして、多かれ少なかれ任意に選択された数値です。 )。そして、彼らはおそらく、この数とキューのサイズ変更に使用される戦略を選択するための典型的なユースケースをベンチマークしました。

于 2012-06-02T10:34:57.423 に答える