PriorityQueue是基于priorty堆的未绑定优先级队列。 PriorityQueue中元素的顺序取决于使用的构造函数的类型。 默认情况下,PriorityQueue按自然顺序排序。 可以在实例化优先级队列时提供比较器。

PrioryQueue的基本操作是:

  • offer()add() - 将指定的元素插入优先级队列。
  • poll()remove() - 检索并删除优先级队列的头部。
  • peek()element() - 检索但不删除优先级队列的头部。

如果任何条件失败,add()remove()element()方法抛出异常。

如果任何条件失败,provide()poll()peek()方法返回特殊值(nullfalse,具体取决于操作)。

在本节中,我们将展示人员优先队列的示例。

文件:Person.java -

package com.yiibai.tutorial;

/**
 * @author yiibai
 *
 */
public class Person{
    private int id;
    private String name;
    private int age;

    public Person(int idString nameint age) {
        this.setId(id);
        this.setName(name);
        this.setAge(age);
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "("+id+""+name+""+age+")";
    }
}

文件:PersonComparator.java - 此类将根据人的年龄确定队列的优先级。

package com.yiibai.tutorial;

import java.util.Comparator;

/**
 * @author yiibai
 *
 */
public class PersonComparator implements Comparator<Person>{
    @Override
    public int compare(Person o1 Person o2) {
        return (o2.getAge()-o1.getAge());
    }
}

文件:PriorityQueueExample.java -

package com.yiibai.tutorial;

import java.util.PriorityQueue;
import java.util.Queue;

/**
 * @author yiibai
 *
 */
public class PriorityQueueExample {
    public static void main(String[] args) {
        Queue<Person> queue=new PriorityQueue<>(new PersonComparator());

        /*Add elements to queue*/
        queue.offer(new Person(1"Sunil"25));
        queue.offer(new Person(2"John"20));
        queue.offer(new Person(3"Jack"30));
        queue.offer(new Person(4"Mack"40));
        queue.offer(new Person(5"Tom"15));


        System.out.println("Elements in queue: "+queue);

        /*Remove element from the queue*/
        Person personEle=queue.poll();
        System.out.println("Removed element: "+personEle.toString());
        System.out.println("Elements in queue after poll: "+queue);

        /*Get first element from the queue*/
        Person person=queue.peek();
        System.out.println("Returned element: "+person.toString());
        System.out.println("Elements in queue after peek: "+queue);

    }
}

执行上面示例代码,得到以下结果:

Elements in queue: [(4Mack40) (3Jack30) (1Sunil25) (2John20) (5Tom15)]
Removed element: (4Mack40)
Elements in queue after poll: [(3Jack30) (2John20) (1Sunil25) (5Tom15)]
Returned element: (3Jack30)
Elements in queue after peek: [(3Jack30) (2John20) (1Sunil25) (5Tom15)]