如何使用新的比较器和NO指定的初始容量创建PriorityQueue?

时间:2013-02-26 20:34:23

标签: java priority-queue

在Java中,我不知道如何用新的比较器创建一个新的PriorityQueue但是没有给出队列长度?我该如何创建它?

我知道我可以写:

Queue<Node> theQueue = new PriorityQueue<Node>(15,new Comparator<Node>();

但我希望队列可以像LinkedList那样工作,我的意思是它的长度不固定,我该如何声明呢?

4 个答案:

答案 0 :(得分:9)

没有这样的构造函数。根据JavaDocs the default capacity is 11,您可以为no-arg PriorityQueue构造函数指定类似行为:

Queue<Node> theQueue = new PriorityQueue<Node>(11,new Comparator<Node>());

是的,the queue will grow if it needs to.

  

优先级队列是无限制的,但具有内部容量,用于控制用于存储队列中元素的数组的大小。它始终至少与队列大小一样大。当元素添加到优先级队列时,其容量会自动增加。没有具体说明增长政策的细节。

答案 1 :(得分:2)

从Java版本8开始,有一个新的构造函数可以满足您的要求:PriorityQueue(比较器比较器)

所以你会得到:

Queue<Node> theQueue = new PriorityQueue<>(new Comparator<Node>());

答案 2 :(得分:1)

我担心在没有指定初始容量的情况下,无法仅指定Comparator。请注意,这只是初始容量 - 队列可以从此初始值增长。

答案 3 :(得分:0)

您可以使用自定义比较器创建优先级队列,而无需使用Java Lambda(Java SE 8中的一项功能)修复大小。

例如,你可以这样做:

PriorityQueue<String> pq = new PriorityQueue<>((s1, s2) -> s1.compareTo(s2));

查看有关Lambda的示例: https://www.mkyong.com/java8/java-8-lambda-comparator-example/