PriorityQueue的基本概念
日期: 2020-12-12 分类: 跨站数据测试 376次阅读
优先级队列: priorityQueue
-
优先级队列是一个基于优先级堆来实现,使用数组存放内容,添加操作会进行扩容。
基于元素的Comparable接口进行排序,或者在ProrityQueue构造的时候传一个Comparator接口指定
排序规则,优先级队列中的元素不能为null. 如果使用自然排序,类必须实现Comparable接口,否则
在队列内部转换时会报ClassCastException -
相比于普通队列的最先入队的,在队列头部, 优先级队列的头部就是排好序后最小的元素.
PriorityQueue 和 iterator()返回的迭代器 实现了Collection和Iterator接口所有的方法。
但是注意了:iterator() 不保证队列元素的优先级排序,就是你通过迭代器的方式输出元素,可能并不是按照优先级来的 -
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
标签:java
精华推荐