PriorityQueue怎么用

PriorityQueue简介

PriorityQueue是基于优先级堆的无界优先级队列。
他们的元素可按自然排序,也可在创建ProorityQueue实例时指定比较器。
不能添加null对象,也不能添加不可比对象,这样会抛出ClassCastException异常。

怎么用

采用自然排序的方式

import java.util.PriorityQueue;

/**
 * @Description
 * @Auther sty
 * @createTime 2018/9/18 下午6:07
 */
public class PriorityQueueTest {
    private static PriorityQueue priorityQueue = new PriorityQueue();
    public static void main(String[] args) {
        priorityQueue.add(new Item(10));
        priorityQueue.add(new Item(20));
        priorityQueue.add(new Item(60));
        priorityQueue.add(new Item(30));
        priorityQueue.add(new Item(40));
        priorityQueue.add(new Item(50));

        while (true) {
            Object poll = priorityQueue.poll();
            if(poll != null){
                System.out.println(poll);
            }else{
                break;
            }
        }
    }
}

class Item implements Comparable<Item>{
    private int age;

    public Item(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Item{" +
                "age=" + age +
                '}';
    }

    @Override
    public int compareTo(Item o) {
        return this.age - o.age;//从小到大
    }
}

采用指定比较器的方式

import java.util.Comparator;
import java.util.PriorityQueue;

/**
 * @Description
 * @Auther sty
 * @createTime 2018/9/18 下午6:07
 */
public class PriorityQueueTest {
    private static PriorityQueue priorityQueue = new PriorityQueue(new Comparator<Item>() {
        @Override
        public int compare(Item o1, Item o2) {
            return o1.getAge() - o2.getAge();
        }
    });
    public static void main(String[] args) {
        priorityQueue.add(new Item(10));
        priorityQueue.add(new Item(20));
        priorityQueue.add(new Item(60));
        priorityQueue.add(new Item(30));
        priorityQueue.add(new Item(40));
        priorityQueue.add(new Item(50));

        while (true) {
            Object poll = priorityQueue.poll();
            if(poll != null){
                System.out.println(poll);
            }else{
                break;
            }
        }
    }
}

class Item{
    private int age;

    public Item(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Item{" +
                "age=" + age +
                '}';
    }

    public int getAge() {
        return age;
    }

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

执行结果,一致,均为

Item{age=10}
Item{age=20}
Item{age=30}
Item{age=40}
Item{age=50}
Item{age=60}

(全文完)

(转载本站文章请注明作者和出处 PriorityQueue怎么用