java中的PriorityQueue优先队列的作用是能保证每次取出的元素都是队列中权值最小的,比较的顺序可是是比较类实现comparable中的compareto方法
private class Freq implements Comparable<Freq>{
public int e, freq;
public Freq(int e, int freq){
this.e = e;
this.freq = freq;
}
public int compareTo(Freq another){
if(this.freq < another.freq)
return -1;
else if(this.freq > another.freq)
return 1;
else
return 0;
}
}
但一些基本类型的数据无法修改定义好的比较,便可实现外部比较器comparator中的compare方法
可以在外部new出比较器,传入队列的参数如:
private class FreqComparator implements Comparator<Freq>{
@Override
public int compare(Freq a, Freq b){
return a.freq - b.freq;
}
}
....
PriorityQueue<Freq> pq = new PriorityQueue<>(new FreqComparator());
开发中多使用匿名内部类如:
PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
return map.get(a) - map.get(b);
}
});