代码
import java.util.*;
class TestCollection12 {
public static void main(String args[]) {
PriorityQueue<String> queue = new PriorityQueue<String>();
queue.add("Amit");
queue.add("Vijay");
queue.add("Karan");
queue.add("Jai");
queue.add("Rahul");
System.out.println("head:"+queue.element());
System.out.println("head:"+queue.peek());
System.out.println("iterating the queue elements:");
Iterator itr=queue.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
queue.remove();
queue.poll();
System.out.println("after removing two elements:");
Iterator<String> itr2=queue.iterator();
while (itr2.hasNext()) {
System.out.println(itr2.next());
}
}
}
期望的
amit amit amit vijay karan jai rahul
karan jai rahul
发布于 2015-11-08 11:53:25
来自文档:具有默认初始容量(11)的PriorityQueue,它根据元素的自然顺序对其进行排序。element() & peek返回队列的头部。在第一次迭代之后
Amit
Jai
Karan
Vijay
Rahul
remove() & poll() ->删除队列的头部。在第二次迭代之后,输出将是
Karan
Rahul
Vijay
它就像预期的那样工作!
发布于 2015-11-08 11:55:39
这一切都是关于优先级队列的。在优先级队列中,它以类似数组数据结构存储。对于您的示例,它存储为;
[0] "Amit"
[1] "Jai"
[2] "Karan"
[3] "Vijay"
[4] "Rahul"
通常,索引为零的元素是顶部元素,当您查看或轮询第一个元素时,会轮询第一个元素,数组也会根据此进行更改。
在第一次remove调用之后,数组更改如下。
[0] "Jai"
[1] "Rahul"
[2] "Karan"
[3] "Vijay"
并在调用poll之后再次调用;
[0] "Karan"
[1] "Rahul"
[2] "Vijay"
总而言之,顶部元素总是最小的(或最大的)元素。弹出后,顺序会发生变化。您可以在https://en.wikipedia.org/wiki/Priority_queue上阅读详细信息
https://stackoverflow.com/questions/33593559
复制