PriorityQueue优先级队列及优先级阻塞队列

来源:互联网 发布:私募 变更 知乎 编辑:程序博客网 时间:2024/06/05 07:37

使用优先级队列时必须进行对象进行排序


public static void main(String...args){

//优先级阻塞队列 调用take方法PriorityBlockingQueue<PriorityEntity> priorityBlockingQueue = new PriorityBlockingQueue<PriorityEntity>();PriorityEntity priorityEntity1 = new PriorityEntity ("123",2L);PriorityEntity priorityEntity2 = new PriorityEntity ("we4",1L);priorityBlockingQueue.put(priorityEntity1);priorityBlockingQueue.put(priorityEntity2);//如果队列满了,再添加就会被阻塞try {    System.out.println(priorityBlockingQueue.take().getEntity() + "");    System.out.println(priorityBlockingQueue.take().getEntity() + "");    System.out.println(priorityBlockingQueue.take().getEntity() + "");//为空,数据等待有数据} catch (InterruptedException e) {    e.printStackTrace();}//优先级队列PriorityQueue<PriorityEntity> priorityQueue = new PriorityQueue<PriorityEntity>();PriorityEntity priority1 = new PriorityEntity ("123",2L);PriorityEntity priority2 = new PriorityEntity ("we4",1L);priorityQueue.add(priority1);priorityQueue.add(priority2);//如果队列满了,再添加就报错System.out.println(priorityQueue.poll().getEntity() + "");System.out.println(priorityQueue.poll().getEntity() + "");System.out.println(priorityQueue.poll().getEntity() + "");//为空,再去直接空指针


}





package com.lixy.practice;/** * 可对比两个实体大小的类 * Created by Administrator on 2016/56. */public class PriorityEntity implements Comparable<PriorityEntity> {    private Object entity;    private long priority;    public PriorityEntity(Object entity, long priority) {        this.entity = entity;        this.priority = priority;    }    /**     * 用当前实体的priority与o的对比,数字小优先级高     * @param o 对比实体     * @return 1:当前实体大;-1:当前实体小;0:相等     */    @Override    public int compareTo(PriorityEntity o) {        if(this.priority > o.priority)            return 1;        else if(this.priority < o.priority)            return -1;        else            return 0;    }    public Object getEntity() {        return entity;    }    public long getPriority() {        return priority;    }}
0 0
原创粉丝点击