chengyuyu

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  10 随笔 :: 0 文章 :: 0 评论 :: 1070 阅读

定义

  • 优先队列PriorityQueue是Queue接口的实现,可以对其中元素进行排序。

  • 优先队列中元素默认排列顺序是升序排列,即小根堆。

  • 根据实践,默认情况的排序,如果只是打印整个队列,拿只针对队头元素。如果是poll(),则会按照升序(小根堆)推出。

  • 若要实现整个队列的升序或者降序,需要定义比较器Comparator

    public static void main(String[] args) {
        PriorityQueue<Integer> queue = new PriorityQueue<>();
        queue.offer(8);
        queue.offer(3);
        queue.offer(2);
        System.out.println(queue);  //输出[2,8,3]
        while (!queue.isEmpty()){
            System.out.println(queue.poll());  //输出2,3,8
        }
    }
    

定义小根堆:

PriorityQueue<Integer> queue = new PriorityQueue<>(); //小根堆

定义大根堆:

PriorityQueue<Integer> queue = new PriorityQueue<>((o1, o2) -> (o2 - o1));  //大根堆

比较器

(o1, o2) -> (o2 - o1)  //实际就是一个简易的【降序】比较器

定义升序和降序比较器:

// 升序(小根堆)
static Comparator<Integer> cmp1 = new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1-o2;
    }
};
// 降序(大根堆)
static Comparator<Integer> cmp2 = new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2-o1;
    }
};

// 例如,定义大根堆:
PriorityQueue<Integer> queue = new PriorityQueue<>(cmp2);
posted on   chengyuyu  阅读(551)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示