用Java实现Comparator类
我是java新手。在实现以下代码时,我没有理解一件事:
public class Demo
{
class DemoComparator implements Comparator<Board>
{
@Override
public int compare(Board A, Board B) {
return A.f()-B.f();
}
PriorityQueue<Board>Q = new PriorityQueue<>(10, new DemoComparator());
}
这里,Board是一个我没有展示的类,f()是一个返回整数值的函数。我的问题是,如果我写:
Q.add(element1);
Q.add(element2);
Q.add(element3);
其中,element1、element2和element3为Board类型,并具有各自的f()函数返回的f值
element1、element2和element3是否会根据其f值存储在优先级队列中,并考虑任何递增或递减顺序?当行:返回A.f()-B.f()将被调用吗
# 1 楼答案
是的,元素将由传递给构造函数的比较器排序。从文件中:
https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html
队列的头是值最低的项。当您从集合接口调用add()或从队列接口调用offer()方法时,将在构造函数上调用comparator。请看源代码:
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/PriorityQueue.java#267
或者写一个小测试来证明它正在发生
# 2 楼答案
如果
f
值本身是Comparable
,则可能需要使用这将确保您的数据按
f
的自然顺序排序,否则您可以像在提供的示例中那样自己定义比较器功能