java中优先级队列的基本使用
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()); } } }
新手小白学习优先级队列,如有错误及侵犯,欢迎指正