Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >跨站数据测试

PriorityQueue的基本概念

优先级队列: priorityQueue

  1. 优先级队列是一个基于优先级堆来实现,使用数组存放内容,添加操作会进行扩容。
    基于元素的Comparable接口进行排序,或者在ProrityQueue构造的时候传一个Comparator接口指定
    排序规则,优先级队列中的元素不能为null. 如果使用自然排序,类必须实现Comparable接口,否则
    在队列内部转换时会报ClassCastException

  2. 相比于普通队列的最先入队的,在队列头部, 优先级队列的头部就是排好序后最小的元素.
    PriorityQueue 和 iterator()返回的迭代器 实现了Collection和Iterator接口所有的方法。
    但是注意了:iterator() 不保证队列元素的优先级排序,就是你通过迭代器的方式输出元素,可能并不是按照优先级来的

  3. ProrityQueue不保证线程安全,多线程同时修改会有并发问题,多线程环境下使用ProrityBlockingQueue
    ProtityQueue中提供的入队和出队操作的时间复杂度是log(n)

     PriorityQueue<Stu> queue = new PriorityQueue();
     Stu a = new Stu(1, "ab");
     Stu b = new Stu(1, "cd");
     Stu c = new Stu(1, "ed");
    
    
     queue.add(c);
     queue.add(b);
     queue.add(a);
    

// 顺序是 a b c
// System.out.println(queue.poll());
// System.out.println(queue.poll());
// System.out.println(queue.poll());

    // 顺序不一定是a b  c
    Iterator<Stu> iterator = queue.iterator();
    while (iterator.hasNext()) {
        Stu stu = iterator.next();
        System.out.println(stu);
    }

场景分析: 你要发送一个延时消息,你讲三个不同时间点的消息 放到队列,正常的队列是先进先出,优先级队列,会按照你指定的规则 进行排序,这样会让先到期的消息进行发送

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: XCTF 攻防世界 Reverse新手题(insanity, python-trade)

下一篇: 编程简介

精华推荐