2015-11-25 61 views
-3

我想从对象数组(某些自定义类)中获取顶部K元素。我为我的班级定义了一个比较器,可以正常工作。阵列的大小非常非常大。由于我只需要最高K元素,因此我计划使用大小为K的优先队列来保持我的空间复杂度为常数O(k)。当队列已满时在优先级队列(Java)中插入一个元素

我使用了构造函数PriorityQueue(int initialCapacity,Comparator comparator)。

当我将优先级队列的大小保持为K时,当我尝试删除K个元素时,它给了我一个错误;可能是因为一些大小的限制。但是,如果我使K + 1的大小,它工作正常。总是。

我想了解PriorityQueue的容量属性如何工作。它是无界的吗?如果是的话,初始化队列容量有什么用处。

+2

“当我尝试删除K元素时,它给了我一个数组”。你的意思是“它给我一个*错误* ...”?如果是这样,*什么*错误? – EJP

+0

我重复一遍。 **什么**错误? – EJP

+0

@EJP:其实我看不到错误。这是一个黑客等级问题,如果我保持K的大小,测试用例就会失败。它通过K + 1。 –

回答

0

我想了解PriorityQueue的容量属性如何工作。它是无界的吗?

Javadoc

基于优先级堆无界优先级队列。 ...优先级队列是无界的,但具有控制用于存储队列中元素的数组大小的内部容量。它总是至少与队列大小一样大。随着元素被添加到优先级队列中,其容量会自动增加。

您写道:

当我保持优先级队列为K的大小,它给了我一个错误[我校]当我尝试删除K中的元素;可能是因为一些大小的限制。但是,如果我使K + 1的大小,它工作正常。总是

无法重现。