您的位置:首页 > 产品设计 > UI/UE

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

2017-03-15 09:36 393 查看
使用优先级队列时必须进行对象进行排序


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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  优先级队列