您的位置:首页 > 编程语言 > Java开发

java中PriorityQueue优先级队列使用方法

2013-01-30 14:46 686 查看
from:http://blog.csdn.net/hiphopmattshi/article/details/7334487

我有简单修改一下,主要是原来的代码不符合Java规范。另外,我添加了一行注释:

// 注意:PriorityQueue并非线程安全,线程安全的优先级队列用这个:PriorityBlockingQueue

---------------------------------------------------------------------------------------------------------------------------------

优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。
  PriorityQueue是从JDK1.5开始提供的新的数据结构接口。

  如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头,字符串则按字典序排列。
由于网上的资料大多将优先级队列各个方法属性,很少有实例讲解的,为方便大家以后使用,我就写了个demo~
如果想实现按照自己的意愿进行优先级排列的队列的话,需要实现Comparator接口。下面的方法,实现了根据某个变量,来进行优先级队列的建立。

package com.taobao.test;

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

// 注意:PriorityQueue并非线程安全,线程安全的优先级队列用这个:PriorityBlockingQueue

public class PriorityQueueTest {
private String name;
private int population;
public PriorityQueueTest(String name, int population)
{
this.name = name;
this.population = population;
}
public String getName()
{
return this.name;
}

public int getPopulation()
{
return this.population;
}
public String toString()
{
return getName() + " - " + getPopulation();
}
public static void main(String args[])
{
Comparator<PriorityQueueTest> OrderIsdn =  new Comparator<PriorityQueueTest>(){
public int compare(PriorityQueueTest o1, PriorityQueueTest o2) {
// TODO Auto-generated method stub
int numbera = o1.getPopulation();
int numberb = o2.getPopulation();
if(numberb > numbera)
{
return 1;
}
else if(numberb<numbera)
{
return -1;
}
else
{
return 0;
}

}

};

Queue<PriorityQueueTest> priorityQueue =  new PriorityQueue<PriorityQueueTest>(11,OrderIsdn);

PriorityQueueTest t1 = new PriorityQueueTest("t1",1);
PriorityQueueTest t3 = new PriorityQueueTest("t3",3);
PriorityQueueTest t2 = new PriorityQueueTest("t2",2);
PriorityQueueTest t4 = new PriorityQueueTest("t4",0);
priorityQueue.add(t4);
priorityQueue.add(t1);
priorityQueue.add(t3);
priorityQueue.add(t2);

System.out.println(priorityQueue.poll().toString());
System.out.println(priorityQueue.poll().toString());
System.out.println(priorityQueue.poll().toString());
System.out.println(priorityQueue.poll().toString());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 优先级