1.什么是优先队列?
优先队列PriorityQueue是Queue接口的实现,可以对其中元素进行排序,可以放基本数据类型的包装类(如:Integer,Long等)或自定义的类。对于基本数据类型的包装器类,优先队列中元素默认排列顺序是升序排列,但对于自己定义的类来说,需要自己定义比较器
2.构造方法
3.常用方法
3.1添加元素
add(E e) 将指定的元素插入到此优先级队列中。 |
offer(E e) 将指定的元素插入到此优先级队列中。 |
3.2删除元素
poll() 检索并删除此队列的头,如果此队列为空,则返回 |
从该队列中删除指定元素的单个实例(如果存在)。 |
从此优先级队列中删除所有元素。 |
3.3返回队头,但是不删除
peek()
检索但不删除此队列的头,如果此队列为空,则返回 null
3.4其他方法
返回用于为了在这个队列中的元素,或比较null
如果此队列根据所述排序natural ordering的元素。
contains(Object o) 如果此队列包含指定的元素,则返回 |
size() 返回此集合中的元素数。 |
4.比较器声明升降序
Comparator<Object> cmp = new Comparator<Object>() {
public int compare(Object o1, Object o2) {
//升序
return o1-o2;
//降序
return o2-o1;
}
};
- 优先级队列删除元素,不是根据添加顺序。而是根据优先级进行判断的。
- 优先队列默认是一个大顶堆,因为优先级最高的是最小的数,删除元素最小的数(优先级最高,也就是队头)。维护的是一个大顶堆。
- 降序排列,说明每次弹出队头(最大的数),也就是维护了一个小顶堆。升序排列则相反。