Java中优先级队列的基本使用
二叉堆是一种基于树的优先级队列,我们也可以在此之前了解一下二叉堆,这里不再解释。
正常的队列的实现
Queue<Integer> q = new LinkedList<>();
//这里也可以用offer()
//正常的先进先出
q.add(1);
q.add(4);
q.add(2);
q.add(3);
q.add(6);
q.add(5);
for(int i = 0;i < 6;i++){
System.out.println(q.poll());
}
打印结果(正常的先入先出)
1
4
2
3
6
5
引入优先级队列
//默认数字越小,优先级越高
//参数6为队列的初始容量
PriorityQueue<Integer> pq = new PriorityQueue<>(6);
//这里也可以用pq.offer()
pq.add(1);
pq.add(4);
pq.add(2);
pq.add(3);
pq.add(6);
pq.add(5);
for(int i = 0;i < 6;i++){
System.out.println(pq.poll());
}
打印结果(增序打印)
1
2
3
4
5
6
自定义优先级
//首先创建一个list集合
List<Integer> list = new ArrayList<>();
for(int i = 0; i < 6; i++){
list.add(i+1);
}
//正常输出打印
for (Integer i : list) {
System.out.println(i);
}
System.out.println("----------");
//这里我使用的idea工具,ctrl+q查看了所需参数
//(b-a) 为逆序排列,我们可以根据自己所需再次设置条件
PriorityQueue<Integer> pq1 = new PriorityQueue<>(list.size(),(a,b)->(b-a));
for(int i = 0;i < list.size();i++){
//将list中的元素加入到优先级队列中
pq1.add(list.get(i));
}
for(int i = 0;i < list.size();i++){
System.out.println(pq1.poll());
}
打印结果(倒序打印)
6
5
4
3
2
1
完整代码
package MyDemo;
import java.util.*;
public class TestQueue3 {
public static void main(String args[]){
Queue<Integer> q = new LinkedList<>();
//这里也可以用offer()
//正常的先进先出
q.add(1);
q.add(4);
q.add(2);
q.add(3);
q.add(6);
q.add(5);
for(int i = 0;i < 6;i++){
System.out.println(q.poll());
}
System.out.println("------------");
//默认数字越小,优先级越高
//参数6为队列的初始容量
PriorityQueue<Integer> pq = new PriorityQueue<>(6);
//这里也可以用pq.offer()
pq.add(1);
pq.add(4);
pq.add(2);
pq.add(3);
pq.add(6);
pq.add(5);
for(int i = 0;i < 6;i++){
System.out.println(pq.poll());
}
System.out.println("------------");
//下面为自定义优先级条件
//首先创建一个list集合
List<Integer> list = new ArrayList<>();
for(int i = 0; i < 6; i++){
list.add(i+1);
}
//正常输出打印
for (Integer i : list) {
System.out.println(i);
}
System.out.println("----------");
//这里我使用的idea工具,ctrl+q查看了所需参数
//(b-a) 为逆序排列,我们可以根据自己所需再次设置条件
PriorityQueue<Integer> pq1 = new PriorityQueue<>(list.size(),(a,b)->(b-a));
for(int i = 0;i < list.size();i++){
//将list中的元素加入到优先级队列中
pq1.add(list.get(i));
}
for(int i = 0;i < list.size();i++){
System.out.println(pq1.poll());
}
}
}
新手小白学习优先级队列,如有错误及侵犯,欢迎指正