我不知道如何在Java中使用优先级队列,就像在C ++中一样。 在c ++中,我们可以这样做:
priority_queue<object*, vector<object*>, compareClass>
所以当我们有这样的课时:
class Foo{
public:
int number1;
int number2
Foo(){};
};
我们可以使用两个不同的队列来比较两个不同的想法,只需要制作两个compareClasses。
在java中,当我像这样排队时,我遇到了问题:
PriorityQueue<Foo> pq = new PriorityQueue<Foo>();
我只能覆盖compareTo函数一次。 我知道我可以覆盖这样的东西:
class Foo implements Comparable<Foo>{
public int number1;
public int number2;
@Override
public int compareTo(Foo other){
if(number2 != // something)
return Int.compare(number, other.number);
else
return Int.compare(number2, other.number2);
}
}
在这种情况下,程序的共谋性是不同的。 我可以在Java中使用C ++编写类似的内容吗?
答案 0 :(得分:3)
创建Java PriorityQueue
时,请使用带Comparator
的构造函数。这允许您使用您想要的任何比较逻辑,尽管可能已经为该类定义了任何compareTo
方法。