美文网首页
Java队列容器-优先队列PriorityQueue

Java队列容器-优先队列PriorityQueue

作者: 洛神灬殇 | 来源:发表于2022-04-11 19:36 被阅读0次

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

可以放基本数据类型的包装类(如:Integer,Long等)或自定义的类

   对于基本数据类型的包装器类,优先队列中元素默认排列顺序是升序排列

但对于自己定义的类来说,需要自己定义比较器

二、常用方法
peek()//返回队首元素

 poll()//返回队首元素,队首元素出队列

 add()//添加元素

 size()//返回队列元素个数

 isEmpty()//判断队列是否为空,为空返回true,不空返回false

三、优先队列的使用
1.队列保存的是基本数据类型的包装类
//自定义比较器,降序排列

static Comparator cmp =new Comparator() {

  public int compare(Integer e1, Integer e2) {

    return e2 - e1;

  }

};

public static void main(String[] args) {

    //不用比较器,默认升序排列

    Queue q =new PriorityQueue<>();

    q.add(3);

    q.add(2);

    q.add(4);

    while(!q.isEmpty()){

        System.out.print(q.poll()+" ");

    }

    /**        

     * 输出结果 2 3 4

    */

   //使用自定义比较器,降序排列

   Queue qq =new PriorityQueue<>(cmp);

    qq.add(3);

    qq.add(2);

    qq.add(4);

    while(!qq.isEmpty()) {

        System.out.print(qq.poll()+" ");

    }

    /**       

    * 输出结果

    * 4 3 2

    */}

2.队列保存的是自定义类
//矩形类class Node{

publicNode(intchang,int kuan){

    this.chang=chang;

    this.kuan=kuan;

}

int chang;

int kuan;

}

public class Test {

//自定义比较类,先比较长,长升序排列,若长相等再比较宽,宽降序static Comparator cNode=new Comparator() {

    publicint compare(Node o1, Node o2) {

        if(o1.chang!=o2.chang)

            returno1.chang-o2.chang;

        else

           return o2.kuan-o1.kuan;

    }

};

public static void main(String[] args) {

    Queue q=new PriorityQueue<>(cNode);

    Node n1=new Node(1, 2);

    Node n2=new Node(2, 5);

    Node n3=new Node(2, 3);

    Node n4=new Node(1, 2);

    q.add(n1);

    q.add(n2);

    q.add(n3);

    Node n;

    while(!q.isEmpty()) {

        n=q.poll();

        System.out.println("长: "+n.chang+" 宽:" +n.kuan);

    }

}

}

3.优先队列遍历
  PriorityQueue的iterator()不保证以任何特定顺序遍历队列元素。

若想按特定顺序遍历,先将队列转成数组,然后排序遍历

示例

Queue q =new PriorityQueue<>(cmp);

    int[] nums= {2,5,3,4,1,6};

    for(int i:nums){

        q.add(i);

    }

    Object[] nn=q.toArray();

    Arrays.sort(nn);

    for(inti=nn.length-1;i>=0;i--)

        System.out.print((int)nn[i]+" ");

4.比较器生降序说明
Comparator cmp =newComparator() {

    publicint compare(Object o1, Object o2) {

        //升序returno1-o2;

        //降序returno2-o1;

    }

};

相关文章

  • Java队列容器-优先队列PriorityQueue

    一、优先队列概述优先队列PriorityQueue是Queue接口的实现,可以对其中元素进行排序, 可以放基本数据...

  • 【二】优先队列和堆

    堆 ----待补充--- java中的优先队列 PriorityQueue为java中的优先队列((a,b)->b...

  • java笔记

    [java优先队列PriorityQueue的使用] PriorityQueue弹出优先级最高的元素,优先级的比较...

  • 队列

    什么是Java优先级队列(Priority Queue)? 考察点:队列参考回答: PriorityQueue是一...

  • webrtc MessageQueue 处理过程

    PriorityQueue dmsgq_;//优先队列 优先队列继承自 std::priority_queueDe...

  • JAVA优先级队列详解及源码剖析

    JAVA优先级队列详解及源码剖析 PriorityQueue PriorityQueue是在JDK1.5之后出现的...

  • 算法通关 - 优先队列

    优先队列(PriorityQueue) 优先队列也是队列的一种,它的特点: 不像队列按照先进先出来的。优先队列是正...

  • PriorityQueue优先队列

    基于堆排实现优先队列 死磕 java集合之PriorityQueue源码分析

  • Java 优先队列 (PriorityQueue)

    基本概念 Priority queue是抽象集合类的一个子类,实现了Queue接口。一方面priority que...

  • 深挖Handler机制

    一.PriorityQueue优先级队列 在讲Handler之前,先讲一下优先级队列,在Java中具体呈现的类是P...

网友评论

      本文标题:Java队列容器-优先队列PriorityQueue

      本文链接:https://www.haomeiwen.com/subject/vylwsrtx.html