队列中有更多项目

Cod*_*ein 2 java debugging queue

在我的Java程序中,我初始化了一个队列,其中所有数字都从0到1000.

        emptyFrames = new PriorityQueue<Integer>();
        for (int i = 0; i < 1000; i++) {
            emptyFrames.add(i);
        }
        System.out.println("Debug");
Run Code Online (Sandbox Code Playgroud)

但是,当我进入调试时,1155队列中有一些项目.

调试 为什么会这样?

FTh*_*son 5

大于1000的索引与队列的容量有关,而不是与其大小相关.

在内部,PriorityQueue由一组对象支持.将对象添加到具有完整后备阵列的队列时,队列将通过调用将数组扩展适当的数量grow,以便它将具有可用于将来调用的内部空间(容量)add.这避免了每次add调用时必须扩展其数组的队列,这将是非常低效的.

private void grow(int minCapacity) {
    int oldCapacity = queue.length;
    // Double size if small; else grow by 50%
    int newCapacity = oldCapacity + ((oldCapacity < 64) ?
                                     (oldCapacity + 2) :
                                     (oldCapacity >> 1));
    // overflow-conscious code
    if (newCapacity - MAX_ARRAY_SIZE > 0)
        newCapacity = hugeCapacity(minCapacity);
    queue = Arrays.copyOf(queue, newCapacity);
}
Run Code Online (Sandbox Code Playgroud)

Docjar检索的代码.