关于java优先队列的用法

来源:互联网 发布:外国人在淘宝网可以吗 编辑:程序博客网 时间:2024/06/03 17:45

java提供PriorityQueue类实现优先队列,但是处理时默认是以数字大小(字符串是以字典顺序)进行设置优先方式。如果自己使用的话,一般可以将插入元素封装成类,类包含元素和int型变量来设置优先级。

例如代码如下:

 

package Queue;import java.util.*;public class PriorityQueues extends PriorityQueue<Url>{/*构造方法继承父类并修改其中的compare方法 * * 改写compare方法使其按照自己方式设置优先级这是方法 */public PriorityQueues(){super(1,new Comparator<Url>(){@Overridepublic int compare(Url o1, Url o2) {// TODO Auto-generated method stubif( o1.getDegree()< o2.getDegree())return -1 ;else if(o1.getDegree()<o2.getDegree()){return 0;}else{return 1;}}         });}//改写contain方法,用于判断某个类是否在优先队列中(包括该类和与该类相同内容的类)以前方法只包括该类@Overridepublic boolean contains(Object e){//获得优先队列中的所有元素Object [] column = toArray();for(int i = 0 ; i < column.length; i++){//此处判断优先队列中元素是否与e相同if(((Url)column[i]).equals((Url)e)){return true ;}}return false;}}


元素类:包含元素和优先级属性:

 

package Queue;public class Url {private String url ; private int degree ;public Url(String url){this.url = url ;setDegree();}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public int getDegree() {return degree;}//根据url来设定优先级,根据自己的需要任意设定/* *   http://item 级别最高 *   http://list 其次 */public void setDegree() {if(url.contains("http://item.taobao")){degree = 1 ;return ;}else if(url.contains("http://list.taobao")||url.contains("http://baoxian.taobao")){degree = 2 ;return ;}else if(url.contains("http://s.taoao")){degree = 3 ;return ;}else {degree = 4 ;return ;}}//判断Url是否内容是否相同,用于优先队列中contains方法@Overridepublic boolean equals(Object e){if(this.url.equals(((Url)e).getUrl())&&this.degree==((Url)e).getDegree())return true;return false;}}