问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是Java优先级队列(PriorityQueue)?

发布网友 发布时间:2022-04-23 06:11

我来回答

2个回答

懂视网 时间:2023-02-14 20:31

java priorityqueue是怎样的呢?下面就让我们一起来了解一下吧:

java中的priorityqueue一般也就是代表优先队列。

这是属于Queue接口的实现,能够对其中元素进行排序,还能放基本数据类型的包装类或是自定义的类,而对于基本数据类型的包装类,优先队列中元素一般是默认排列顺序为升序排列的。

参考范例:

队列保存的是基本数据类型的包装类,具体代码为:

//自定义比较器,降序排列

static Comparator<Integer> cmp = new Comparator<Integer>() {

      public int compare(Integer e1, Integer e2) {

        return e2 - e1;

      }

    };

public static void main(String[] args) {

        //不用比较器,默认升序排列

        Queue<Integer> q = new PriorityQueue<>();

        q.add(3);

        q.add(2);

        q.add(4);

        while(!q.isEmpty())

        {

            System.out.print(q.poll()+" ");

        }

        /**

         * 输出结果

         * 2 3 4 

         */

        //使用自定义比较器,降序排列

        Queue<Integer> qq = new PriorityQueue<>(cmp);

        qq.add(3);

        qq.add(2);

        qq.add(4);

        while(!qq.isEmpty())

        {

            System.out.print(qq.poll()+" ");

        }

        /**

         * 输出结果

         * 4 3 2 

         */

}

队列保存的是自定义类,具体代码为:

//矩形类

class Node{

    public Node(int chang,int kuan)

    {

        this.chang=chang;

        this.kuan=kuan;

    }

    int chang;

    int kuan;

}


public class Test {

    //自定义比较类,先比较长,长升序排列,若长相等再比较宽,宽降序

    static Comparator<Node> cNode=new Comparator<Node>() {

        public int compare(Node o1, Node o2) {

            if(o1.chang!=o2.chang)

                return o1.chang-o2.chang;

            else

                return o2.kuan-o1.kuan;

        }

        

    };

    public static void main(String[] args) {

        Queue<Node> q=new PriorityQueue<>(cNode);

        Node n1=new Node(1, 2);

        Node n2=new Node(2, 5);

        Node n3=new Node(2, 3);

        Node n4=new Node(1, 2);

        q.add(n1);

        q.add(n2);

        q.add(n3);

        Node n;

        while(!q.isEmpty())

        {

            n=q.poll();

            System.out.println("长: "+n.chang+" 宽:" +n.kuan);

        }

     /**

      * 输出结果

      * 长: 1 宽:2

      * 长: 2 宽:5

      * 长: 2 宽:3

      */

    }

}

以上就是小编的分享了,希望能够帮助到大家。

热心网友 时间:2023-02-14 17:39

PriorityQueue是一个基于优先级堆的无界队列,它的元素是按照自然顺序(naturalorder)排序的。在创建的时候,可以给它提供一个负责给元素排序的比较器。PriorityQueue不允许null值,因为他们没有自然顺序,或者说他们没有任何的相关联的比较器。最后,PriorityQueue不是线程安全的,入队和出队的时间复杂度是O(log(n))。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
武汉大学在职研究生考试科目有哪些 报考武汉大学在职研究生录取率高吗? 武汉大学mpa在职研究生好考吗 忘记车子买哪家保险 怎么查 67年的羊和什么生肖最配夫妻 67年的羊和69年鸡相配吗? 67年羊男与69年鸡女同是11月出生婚配如何? 67年9月和69年十月的结婚 “新菊亦侵篱”的出处是哪里 “闲绕篱头看菊花”的出处是哪里 佳能多功能一体机MF4400怎么用 为什么我的win7系统桌面右下角显示不了正在运行的软件小图标? Java运算优先顺序问题 win7系统,桌面很多文件图标都不见了 java 如何设置线程的优先级 如何让电脑显示器看电视 多功能佳能一体机MF4010B的二合一功能如何使用 java优先队列这里的构造函数用法该怎么理解? 怎样用电脑显示器看电视?没有主机哦 国产四轮定位仪哪个好些,我现在考虑元征 一成 战神,不知道这三个那个测量精度高些, 佳能iC MF4712多功能一体机怎么样好不好 win7系统右下角软件图标不显示,就是空白一块,不是隐藏 java 优先级 用什么东西可以让电脑显示器可以看电视?需要什么来转接? 亨特和杰奔四轮定位仪哪个精确度高 佳能多功能一体机MG6280和MG6380哪个更好?求大师指导 java线程中的优先级问题 电脑显示屏怎么接上就可以看电视? 四轮定位仪哪个品牌好 JAVA的运算符的优先级是什么样的? win7系统开机有时不能显示桌面图标是怎么回事?怎么解决? Java如何获得运行线程的优先级 关于Java线程的优先级 java线程优先级的使用 在线等 求指教 java运算符优先级 java线程优先级有什么意义? java运算符的优先级口诀?急用急用!! CCTV5在线直播高清足球比赛是免费观看的吗? JAVA运算优先级 beats蓝牙耳机和JEET蓝牙耳机哪个更好用? 今晚CCTV5有什么足球比赛直播? java类中的优先级顺序 CCTV5直播在线观看足球是分时间段播的吗? beats的蓝牙耳机哪款的降噪效果比较好,哪款音质更好? Java数据类型自动转换的优先顺序 今天晚上CCTV-5直播什么足球赛事? 家里做饭的大锅长时间烧水,有水垢了怎么清理? 关于java的优先级问题 beats几百的蓝牙耳机和JEET蓝牙耳机哪个好用? beats wireless头戴式蓝牙耳机怎么样