Java中优先级队列的初始容量
我对 Java 中优先队列的初始容量的使用感到困惑。如官方文档所示,有一个以初始容量作为参数的构造函数。但是当我使用该构造函数指定初始容量并开始将整数放入其中时,优先级队列的大小变得大于初始容量。
例如,我将一个 PQ 的初始容量指定为 3,并将 10 个不同的数字放入其中,以便我可以得到第 3 个最小的数字,但结果是该队列中有 10 个数字。为了解决这个问题,我总是不得不手动删除一些数字,所以我想知道初始容量是如何工作的,或者在这种情况下我应该使用初始容量。
谢谢!
回答
优先级队列由一些数据结构支持——特别是一个数组。初始容量是这个数组最初有多大。
这在文档中描述:
优先级队列是无界的,但具有控制用于存储队列中元素的数组大小的内部容量。它始终至少与队列大小一样大。当元素被添加到优先级队列时,它的容量会自动增加。
能够指定容量的重点不是限制元素的数量,而是提示数组需要有多大,以避免必须增长该数组(这需要时间、内存等) )。
所以,是的,如果您要使用优先级队列,则需要自己删除不需要的元素(或者,一旦获得了想要的元素数量,就丢弃队列)。