关于java优先队列的用法

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

例如代码如下:

 

package Queue;

import java.util.*;

public class PriorityQueues extends PriorityQueue<Url>{
	
	/*构造方法继承父类并修改其中的compare方法
	 * * 改写compare方法使其按照自己方式设置优先级这是方法
	 */
	public PriorityQueues(){
		super(1,new Comparator<Url>(){
			@Override
			public int compare(Url o1, Url o2) {
				// TODO Auto-generated method stub
				if( o1.getDegree()< o2.getDegree())
					return -1 ;
				else if(o1.getDegree()<o2.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;
		
	}
}


 

你可能感兴趣的:(java,String,object,url,equals,Class)