我想通过使用如下指定值将对象添加到优先级队列
PriorityQueue<Edge> queue=new PriorityQueue<Edge>();
这是我想要在优先级队列中按其权重排序的类Edge
public class Edge {
private int start,end;
private double weight;
public Edge(int s, int e,Double w){
start=s;
end=e;
weight=w;
}
public int getStart(){
return start;
}
public int getEnd(){
return end;
}
public double getWeight(){
return weight;
}
4条答案
按热度按时间ars1skjm1#
您应该通过指定如何比较其元素来创建稍微不同的优先级队列。这是通过为
Edge
类传递一个匿名Comparator
来完成的:也许你需要根据你的排序顺序来切换
-1
和1
的返回值。5n0oy7gb2#
您可以创建一个优先级队列和一个比较边的Checker(自定义)类。就像这样:
yk9xbfzb3#
Java 8:
omqzjyyz4#
方案一:
最小堆数:
a -> a.getWeight()
最大堆数:
a -> -a.getWeight()
示例:
方案二:
最小堆数:
Edge::getWeight
最大堆数:
(Edge::getWeight).reversed()
示例:
方案三:
最小堆数:
(a, b) -> a.getStart() - b.getStart()
(a, b) -> (int) (a.getWeight() - b.getWeight())
最大堆数:
(a, b) -> b.getStart() - a.getStart()
(a, b) -> (int) (b.getWeight() - a.getWeight())
示例: