在我的 Java 程序中,我用 0 到 1000 之间的所有数字初始化了一个队列。
emptyFrames = new PriorityQueue<Integer>();
for (int i = 0; i < 1000; i++) {
emptyFrames.add(i);
}
System.out.println("Debug");
但是,当我进入调试时,队列中有 1155
项。
最佳答案
大于 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/