java提供PriorityQueue类实现优先队列,但是处理时默认是以数字大小(字符串是以字典顺序)进行设置优先方式。如果自己使用的话,一般可以将插入元素封装成类,类包含元素和int型变量来设置优先级。
例如代码如下:
package Queue;
import java.util.*;
public class PriorityQueues extends PriorityQueue{
/*构造方法继承父类并修改其中的compare方法
* * 改写compare方法使其按照自己方式设置优先级这是方法
*/
public PriorityQueues(){
super(1,new Comparator(){
@Override
public int compare(Url o1, Url o2) {
// TODO Auto-generated method stub
if( o1.getDegree()< o2.getDegree())
return -1 ;
else if(o1.getDegree()
return 0;
}else{
return 1;
}
}
});
}
//改写contain方法,用于判断某个类是否在优先队列中(包括该类和与该类相同内容的类)以前方法只包括该类
@Override
public 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方法
@Override
public boolean equals(Object e){
if(this.url.equals(((Url)e).getUrl())&&this.degree==((Url)e).getDegree())
return true;
return false;
}
}