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());

        }

    }

}

新手小白学习优先级队列,如有错误及侵犯,欢迎指正

你可能感兴趣的:(java,数据结构,intellij-idea)