PriorityQueue
但是没有给出队列长度?我该如何创建它?
我知道我可以写:
Queue<Node> theQueue = new PriorityQueue<Node>(15,new Comparator<Node>();
但我希望队列可以像LinkedList
那样工作,我的意思是它的长度不固定,我该如何声明呢?
答案 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/