优先队列和堆

1.什么是优先队列?

 优先队列PriorityQueue是Queue接口的实现,可以对其中元素进行排序,可以放基本数据类型的包装类(如:Integer,Long等)或自定义的类。对于基本数据类型的包装器类,优先队列中元素默认排列顺序是升序排列,但对于自己定义的类来说,需要自己定义比较器

2.构造方法

 3.常用方法

3.1添加元素

add(E e)

将指定的元素插入到此优先级队列中。

offer(E e)

将指定的元素插入到此优先级队列中。

 3.2删除元素

poll()

检索并删除此队列的头,如果此队列为空,则返回 null 。

remove(Object o)

从该队列中删除指定元素的单个实例(如果存在)。

clear()

从此优先级队列中删除所有元素。

 3.3返回队头,但是不删除

peek()

检索但不删除此队列的头,如果此队列为空,则返回 null 

3.4其他方法

 

 comparator()

返回用于为了在这个队列中的元素,或比较null如果此队列根据所述排序natural ordering的元素。

contains(Object o)

如果此队列包含指定的元素,则返回 true 。

size()

返回此集合中的元素数。

 4.比较器声明升降序

Comparator<Object> cmp = new Comparator<Object>() {
        public int compare(Object o1, Object o2) {
            //升序
            return o1-o2;
            //降序
            return o2-o1;
        }
    };
  1. 优先级队列删除元素,不是根据添加顺序。而是根据优先级进行判断的。
  2. 优先队列默认是一个大顶堆,因为优先级最高的是最小的数,删除元素最小的数(优先级最高,也就是队头)。维护的是一个大顶堆。
  3. 降序排列,说明每次弹出队头(最大的数),也就是维护了一个小顶堆。升序排列则相反。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值