java - 队列中有更多我放入其中的项目

标签 java debugging queue

在我的 Java 程序中,我用 0 到 1000 之间的所有数字初始化了一个队列。

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

但是,当我进入调试时,队列中有 1155 项。

Debug 为什么会发生这种情况?

最佳答案

大于 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);
}

Docjar 检索到的代码.

关于java - 队列中有更多我放入其中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32040610/

相关文章:

java - 如何将 Joda DateTime(UTC) 转换为 java.sql.Timestamp(UTC)?

javascript - JavaScript 队列的 O(1) 删除

iphone - 从异步回调更新 UI 组件 (dispatch_queue)

javascript - 当 asp.net 应用程序在 firefox 下运行时,如何在 visual studio 中调试 javascript?

c++ - 调试列表数组

模板数组中的 C++ 堆损坏

java - struts 2 & sitemesh 中不同环境的不同资源文件root

java - 在 update() void 中添加 if 语句时,图形不出现

java - 使用 commandId 检索 Activity 键绑定(bind)

php - PHP解析/语法错误;以及如何解决它们