PriorityQueue的使用

概念

在了解PriorityQueue之前我们首先套清楚什么是Queue。

  • 队列(queue)与栈类似,是一种线性表。遵循“先进先出”(First In First Out) 的原则.
  • 即像排队一样刚来的人在队尾(rear)入队(push),而出队(pop)的人都是在队首(front)

但是有时候我们需要在队列中基于优先级来处理对象。比如在分座位时老师会让同学按照高低个子排队,先分矮个子的同学

  • 而PriorityQueue就是一个基于优先级的无界优先队列。
  • 即队列中元素入队后会根据我们指定的Comparator规则排队或者默认最小元素。
  • 除此之外PriorityQueue是一个无界队列,但是初始的容量会随着向队列中添加元素而不断扩容。

基本使用

PriorityQueue与普通的队列的使用方法一致,但是PriorityQueue会根据排序规则判断谁在队首谁在队尾。

默认排序规则

例如:
默认排序
根据打印情况可以看出:PriorityQueue默认采用从小到大的排序规则。

自定义排序规则

有两种方式:

  • 添加元素自身实现了Comparable接口,确保元素是可排序的状态
  • 如果添加元素没有实现Comparable接口,可以在创建PriorityQueue队列时直接指定比较器,如下:
    指定比较器

这里是创建队列时指定了比较器,然后内部类重写compare方法中写出自定义排序的逻辑。如图是按照填入数字的绝对值来排序。

小结

  1. PriorityQueue是可以实现自定义的逻辑排序的队列
  2. 但是深入源码会发现他的offer/poll方法并没有对队列锁定,所以并不是一个线程安全的队列。如果想实现线程安全,需要额外加锁
  3. 同时也要求他存储的元素必须是可以比较的队形,不是的话必须指定比较器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值