PriorityQueue怎么用

原文 https://www.toocruel.net/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}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值